Вопрос состоит в том, какие символы разрешены в параметрах GET без их кодирования или экранирования .
Согласно RFC3986 (общий синтаксис URL) и RFC7230, раздел 2.7.1 (синтаксис HTTP / S URL) единственными символами, которые необходимо кодировать в процентах, являются те, которые находятся за пределами вне набора query , см. определение ниже.
Однако существуют дополнительные спецификации, такие как HTML5, веб-формы и устаревший индексированный поиск , рекомендация W3C. Эти документы придают особое значение некоторым символам, в частности, таким символам, как = & +; .
Другие ответы здесь предполагают, что большинство зарезервированных символов должно быть закодировано, включая "/" "?". Это не правильно. На самом деле, RFC3986, раздел 3.4 не советует использовать процентное кодирование "/" "?" символы.
иногда для удобства использования лучше избегать
кодирование этих символов.
RFC3986 определяет компонент запроса как:
query = *( pchar / "/" / "?" )
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
pct-encoded = "%" HEXDIG HEXDIG
sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
Механизм процентного кодирования используется для представления октета данных в
компонент, когда соответствующий символ этого октета находится вне
разрешенный набор или используется в качестве разделителя или внутри
компонент.
Вывод: XYZ-часть должна кодировать:
special: # % = & ;
Space
out of query set: [ ]
non ASCII encodable characters
Если не используются специальные символы = &; ключ = значение разделители.
Кодирование других символов разрешено, но не обязательно.