Что такое допустимая строка запроса URL?

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

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

3 ответов


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

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

reserved = gen-delims / sub-delims

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

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

спецификация затем говорит:

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

далее в разделе 2.3 неограниченные символы перечислены следующие:

unreserved = Альфа / цифра /" -"/"."/ "_" / "~"


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

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

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

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

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

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

под структура в Википедии ссылка я предоставил:

  • вопросительный знак используется в качестве разделителя и не является частью строки запроса.
  • строка запроса состоит из ряда пар "поле-Значение"
  • в каждой паре имя и значение поля разделены знаком равенства"=".
  • ряд пар разделен амперсандом, " & " (или точкой с запятой,"; " для URL-адресов, встроенных в HTML и не генерируемых a ...; смотреть ниже.)
  • 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