Почему% (процентов) не считается зарезервированным символом в RFC 3986 (синтаксис URI)?

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

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

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

3 ответа

Решение

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам