Почему% (процентов) не считается зарезервированным символом в 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