Почему% (процентов) не считается зарезервированным символом в RFC 3986 (синтаксис URI)? - PullRequest
2 голосов
/ 18 ноября 2011

Очевидно, что% должен быть закодирован. В статье Википедии о стандарте говорится:

Поскольку символ процента («%») служит индикатором для процентно-кодированные октеты, для этого он должен быть закодирован в процентах как "% 25" октет для использования в качестве данных в URI.

Почему он не указан как зарезервированный символ? Ясно, что зарезервировано для обозначения чего-то особенного в контексте URI ...

Ответы [ 3 ]

3 голосов
/ 18 ноября 2011

«Зарезервированные» символы должны быть доступны в качестве разделителей между различными частями URI.Знак процента не используется для этого - не может быть использован для этого - из-за его использования в кодировке процентов.

Это может помочь прояснить ситуацию, чтобы указать, что есть отдельный список "незарезервированных"символы, и знак процента не является одним из них:

      unreserved  = ALPHA / DIGIT / "-" / "." / "_" / "~"

(от http://www.ietf.org/rfc/rfc3986.txt, внизу страницы 12).Другими словами, в контексте URI «зарезервированный» имеет более конкретное значение, чем можно было бы ожидать.: -)

2 голосов
/ 18 ноября 2011

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

Символ процента не имеет специальное значение в URI - что делает его хорошим выбором для символа escape / кодировки.

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

Это похоже на экранирование символов, когда обратная косая черта \ должнасамо по себе может быть экранировано \\ только потому, что это был персонаж, выбранный для первоначального экранирования, как в \t или \n

2 голосов
/ 18 ноября 2011

Знак процента уже зарезервирован благодаря участию в грамматическом правиле pct-encoded.Кроме того, этот абзац кажется полезным для темы:

URI состоит из ограниченного набора символов, состоящего из цифр, букв и нескольких графических символов.Зарезервированное подмножество этих символов может использоваться для разграничения компонентов синтаксиса в URI, в то время как оставшиеся символы, включая как незарезервированный набор, так и те зарезервированные символы, не выступающие в качестве разделителей, определяют идентификационные данные каждого компонента.

Это говорит о том, что сам символ процента действительно зарезервирован для кодирования процента (так как он не разделяет компоненты синтаксиса в URI).Ваша первоначальная интерпретация верна, я думаю, что это просто вопрос семантики.

...