Вопрос по url, http, parsing, anchor – Спасибо, Даниэль, я буду редактировать свой код, поэтому я обновлю его через несколько (рабочих) дней. Мне нравится идея использовать '&' и '=' как seps.

10

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

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

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

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

Ваш Ответ

1   ответ
18

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

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

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

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# Поддельные = 2 & параметры = 3

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

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

НОТА:

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

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

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

Такmachine.domain.com:8232/... должно сработать? Черт возьми, это намного приятнее, чем эти противные черты :-) Paul W Homer
Спасибо, Даниэль, я буду редактировать свой код, поэтому я обновлю его через несколько (рабочих) дней. Мне нравится идея использовать '&' и '=' как seps. Paul W Homer
Разве ваш первый пример не будет интерпретирован как якорь "name" и двух параметров a и b? Это второй пример законен? Paul W Homer
@Paul: он должен работать (и из того, что я могу сказать на моей машине, он работает) Daniel LeCheminant
@Paul: Нет, потому что, согласно спецификации, все, что после # в URL, считается идентификатором фрагмента. Нормальные параметры URL должны быть закодированы до # Daniel LeCheminant

Похожие вопросы