Что такое допустимая строка запроса URL?
Какие символы разрешены в строке запроса URL?
Должны ли строки запроса соответствовать определенному формату?
3 ответа
За http://tools.ietf.org/html/rfc3986
В разделе 2.2 "Зарезервированные символы" перечислены следующие символы:
зарезервировано = gen-delims / sub-delims
gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
Затем в спецификации говорится:
Если данные для компонента URI будут конфликтовать с назначением зарезервированного символа в качестве разделителя, то конфликтующие данные должны быть закодированы в процентах до формирования URI.
Далее в разделе 2.3 "Незарезервированные символы" перечислены следующие:
незарезервировано = АЛЬФА / ЦИФРА / "-" / "." / "_" / "~"
В Википедии есть ваш ответ: http://en.wikipedia.org/wiki/Query_string
"Кодировка URL: некоторые символы не могут быть частью URL (например, пробел), а некоторые другие символы имеют специальное значение в URL: например, символ # может использоваться для дальнейшего указания подраздела (или фрагмента) документ; символ = используется для отделения имени от значения. Для выполнения этих ограничений может потребоваться преобразование строки запроса. Это можно сделать с помощью схемы, известной как кодировка URL.
В частности, для кодирования строки запроса используются следующие правила:
- Буквы (AZ и az), цифры (0-9) и символы ".", "-", "~" и "_" остаются как есть.
- ПРОБЕЛ закодирован как '+' или%20[ссылка на источник]
- Все остальные символы закодированы как шестнадцатеричное представление%FF с любыми не-ASCII символами, сначала закодированными как UTF-8 (или с другой указанной кодировкой)
Октет, соответствующий символу тильды ("~"), часто кодируется как "%7E" в более старых реализациях обработки URI; "%7E" можно заменить на "~" без изменения его интерпретации. Кодировка SPACE в виде "+" и выбор символов "как есть" отличает эту кодировку от RFC 1738 ".
Что касается формата, строки запроса являются парами имя-значение.? отделяет строку запроса от URL. Каждая пара имя-значение разделена амперсандом (&), а имя (ключ) и значение - знаком равенства (=). например. http://domain.com/?key=value&secondkey=secondvalue
Под Структурой в ссылке на Википедию я указал:
- Знак вопроса используется в качестве разделителя и не является частью строки запроса.
- Строка запроса состоит из ряда пар значение-поле
- В каждой паре имя и значение поля разделяются знаком равенства '='.
- Последовательность пар разделяется амперсандом '&' (или точкой с запятой ';' для URL-адресов, встроенных в HTML и не генерируемых...; см. Ниже).
- W3C рекомендует, чтобы все веб-серверы поддерживали разделители точек с запятой в дополнение к разделителям амперсандов [6], чтобы разрешить строки запросов application/x-www-form-urlencoded в URL-адресах в HTML-документах без необходимости экранировать амперсанды.
Эта ссылка содержит ответ и отформатированные значения, которые вам всем нужны.
https://perishablepress.com/url-character-codes/
Для вашего удобства это список:
< %3C
> %3E
# %23
% %25
{ %7B
} %7D
| %7C
\ %5C
^ %5E
~ %7E
[ %5B
] %5D
` %60
; %3B
/ %2F
? %3F
: %3A
@ %40
= %3D
& %26
$ %24
+ %2B
" %22
space %20