Строка запроса: может ли строка запроса содержать URL-адрес, который также содержит строки запроса?
Пример:
http://foo.com/generatepdf.aspx?u=http://foo.com/somepage.aspx?color=blue&size=15
Я добавил тег iis, потому что, полагаю, он также зависит от того, какую серверную технологию вы используете?
5 ответов
Вы, вероятно, захотите UrlEncode URL, который находится в строке запроса.
Серверная технология не должна иметь никакого значения.
Когда вы передаете значение в строку запроса, вам нужно url кодировать пару имя / значение. Если вы хотите передать значение, содержащее специальный символ, такой как знак вопроса (?), Вам просто нужно закодировать этот символ как%3F. Если затем вам нужно было рекурсивно передать другую строку запроса в закодированный URL-адрес, вам нужно будет дважды / тройно / и т. Д. Закодировать URL-адрес, что приведет к оригиналу? превращается в%253F, %25253F и т. д.
Как сообщается в http://en.wikipedia.org/wiki/Query_string
W3C рекомендует, чтобы все веб-серверы поддерживали разделители точек с запятой в дополнение к разделителям амперсандов (ссылка на эту вики-страницу была указана), чтобы разрешить строки запросов application/x-www-form-urlencoded в URL-адресах в HTML-документах, без необходимости экранировать амперсанды.
Итак, я полагаю, что ответ на вопрос "да", и вы должны изменить в ";" точка с запятой "&" и обычно используется для разделителя ключ = значение.
Да, насколько я могу судить, это может быть сделано в соответствии с RFC 3986: универсальный идентификатор ресурса (URI): общий синтаксис (с 2005 года):
Это BNF для строки запроса:
query = *( pchar / "/" / "?" )
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
В спецификации сказано:
- Косая черта ("/") и знак вопроса ("?") Могут представлять данные в компоненте запроса.
- поскольку компоненты запроса часто используются для передачи идентифицирующей информации в виде пар "ключ = значение", а одно часто используемое значение является ссылкой на другой URI, иногда для удобства использования иногда лучше избегать процентного кодирования этих символов
(Но я полагаю, что ваш серверный фреймворк может или не может точно следовать спецификации.)
Нет, но вы можете закодировать URL и декодировать его позже.