Что такое допустимая строка запроса 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
Другие вопросы по тегам