Какова действительная строка запроса URL-адреса?

Какие символы разрешены в строке запроса URL?

Строки запроса должны соответствовать определенному формату?

Ответ 1

Per http://tools.ietf.org/html/rfc3986

В разделе 2.2 Зарезервированные символы перечислены следующие символы:

reserved = gen-delims/sub-delims

gen-delims = ":" / "/" /"? "/" # "/" [ "/" ] "/" @"

sub-delims = "! "/" $ "/" & "/" "/" ( "/" ) "/" * "/" + "/" , "/" ; "/" ="

Затем спецификация:

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

Далее, в разделе 2.3 "Незарезервированные символы" перечислены:

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

Ответ 2

В Википедии есть ваш ответ: http://en.wikipedia.org/wiki/Query_string

" Кодировка URL: Некоторые символы не могут быть частью URL (например, пробел), а некоторые другие символы имеют особое значение в URL-адресе: например, символ # может использоваться чтобы дополнительно указать подраздел (или фрагмент) документа, символ = используется для разделения имени из значения. Строку запроса может потребоваться преобразовать для удовлетворения этих ограничений. Это можно сделать с помощью схемы, известной как кодировка URL-адреса.

В частности, при кодировании строки запроса используются следующие правила:

  • Буквы (A-Z и a-z), числа (0-9) и символы '.', '-', '~' и '_' остаются как -s
  • SPACE кодируется как '+' или %20 [править]
  • Все остальные символы кодируются как шестнадцатеричное представление% FF с любыми символами, отличными от ASCII, которые сначала кодируются как UTF-8 (или другая указанная кодировка)

Октет, соответствующий тильде ( "~" ), часто кодируется как "% 7E" более старыми реализациями обработки URI; "% 7E" можно заменить на "~" без изменения его интерпретации. Кодирование SPACE как "+" и выбор символов "как есть" отличает эту кодировку от RFC 1738 ".

Что касается формата, строки запроса представляют собой пары значений имени.? отделяет строку запроса от URL-адреса. Каждая пара значений имени разделяется амперсандом (&), в то время как имя (ключ) и значение разделяются знаком равенства (=). например. http://domain.com?key=value&secondkey=secondvalue

В Структура в справочной системе Википедии я привел:

  • Значок вопроса используется как разделитель и не является частью строки запроса.
  • Строка запроса состоит из пары пар значений поля
  • В каждой паре имя и значение поля разделяются знаком равенства, '='.
  • Ряд пар разделяется амперсандом, '&' (или точки с запятой, ';' для URL-адресов, встроенных в HTML и не сгенерированных a..., см. ниже).
  • W3C рекомендует, чтобы все веб-серверы поддерживали разделители с запятой в дополнение к амперсандам и разделителям [6], чтобы разрешать строки запроса /x -www-form-urlencoded в URL-адресах в документах HTML без необходимости удаления амперсандов.

Ответ 3

Эта ссылка содержит ответы и отформатированные значения, которые вам нужны.

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