Какие два символа-разделителя будут работать в привязке URL? - PullRequest
10 голосов
/ 19 февраля 2009

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

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

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

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

1 Ответ

18 голосов
/ 19 февраля 2009

Глядя на 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 и т. Д.)

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

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

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

Примечание:

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

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

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

...