Какие два символа разделителя будут работать в привязке URL?

Я использую привязки в своих URL-адресах, позволяя людям добавлять "активные страницы" в веб-приложение. Я использовал якоря, потому что они легко вписываются в механизм истории GWT.

Моя существующая реализация кодирует навигацию и данные в якорь, разделенные символом '-'. То есть создание якорей, таких как # location-location-key-value-key-value

Кроме того, что отрицательные значения (например, -1) вызывают серьезные проблемы синтаксического анализа, он работает, но теперь я обнаружил, что лучше иметь два разделительных символа. Кроме того, givin отрицательный номер вопроса, я хотел бы канаву использовать '-'.

Какие еще символы работают в привязке URL-адреса, которые не будут мешать URL-адресу или параметрам GET? Насколько они стабильны в будущем?

Ответ 1

Глядя на RFC для URL, раздел 3.5, идентификатор фрагмента (который, я полагаю, вы ссылаетесь) определяется как

fragment    = *( pchar / "/" / "?" )

и Приложение A

pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
                 / "*" / "+" / "," / ";" / "="

Интересно, что спецификация также говорит, что

"Символы слэш (" / ") и знак вопроса ("? ") могут представлять данные в идентификаторе фрагмента."

Итак, кажется, что реальные якоря, такие как

<a href="#name?a=1&b=2">
....
<a name="name?a=1&b=2">

должны быть законными и очень похожи на обычную строку запроса URL. (Быстрая проверка подтвердила, что они работают корректно, по крайней мере, в Chrome, firefox и т.д.). Поскольку это работает, я предполагаю, что вы можете использовать свой метод для URL-адресов, например

http://www.site.com/foo.html?real=1&parameters=2 # fake = 2 & parameters = 3

без проблем (например, переменная "parameters" в фрагменте не должна мешать тому, что в строке запроса)

Вы также можете использовать процентную кодировку, когда это необходимо... и есть много других символов, определенных в субграницах, которые могут быть использованы.

Примечание:

Также из спецификации:

"Компонент идентификатора фрагмента указывается знаком символа числа (" # ") и заканчивается в конце URI."

Итак, все после # является идентификатором фрагмента и не должно мешать параметрам GET.