Почему запятая URL закодирована? - PullRequest
26 голосов
/ 12 января 2012

При отладке в ASP.NET MVC я не вижу разницы между:

http://mysite.com?q=hi,bye

и

http://mysite.com?q=hi%2Cbye

Параметр строки запроса "q" всегда имеет значение"привет, пока".

Так почему же запятая закодирована?

Я хочу сделать что-то вроде этого https://stackoverflow.com/a/752109/173957.

У меня есть эта форма:

<form method="GET" action="/Search">
     <input type="hidden" name="q" value="hi,bye"/>
     <input type="submit" value="ok"/>
</form>

Как я могу предотвратить кодирование этого значения?

Ответы [ 4 ]

19 голосов
/ 12 января 2012

Спецификация URI, RFC 3986 , указывает, что компоненты пути URI не содержат незашифрованные зарезервированные символы, а запятая является одним из зарезервированных символов.Для подэлементов , таких как запятая, оставляя их без кодировки, рискует трактовать символ как синтаксис разделителя в схеме URI.Процентное кодирование гарантирует, что символ будет передан как данные.

8 голосов
/ 30 апреля 2012

Я нашел этот список символов, которые не требуют Кодировка URL: http://web.archive.org/web/20131212154213/http://urldecoderonline.com/url-allowed-characters.htm

Обновление
Поскольку исходная ссылка не работает, я использовал архив.org для получения следующего текста со страницы за декабрь 2013 года

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

Незарезервировано - может быть закодировано, но не обязательно

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 - _ . ~

Зарезервировано - иногда необходимо кодировать

! * ' ( ) ; : @ & = + $ , / ? % # [ ]
2 голосов
/ 12 января 2012

Это действительно зависит от браузера.Браузер принимает HTML-форму и решает, как создать URL-адрес на основе входных данных формы.

Если вы используете действительно старый (или плохо запрограммированный) браузер, он может не кодировать запятую.Если вы придерживаетесь стандартов RFC, его действительно следует кодировать.

Если вы хотите предотвратить кодирование запятой для всех браузеров, вам придется использовать JavaScript и создать URL-адрес самостоятельно.

<script lang="JavaScript">
    document.location.href = "/Search?q=hi,bye";
</script>

В любом случае, это не должно иметь значения, потому что вы все равно должны декодировать параметры строки запроса, и результат будет таким же.

0 голосов
/ 12 января 2012

есть несколько символов, которые имеют специальное значение (например, +? # И т. Д.) Или прямо не допускаются (например, пробел, запятая и т. Д.) В URL. Чтобы использовать такие символы в URL-адресе, вам необходимо их кодировать и декодировать. Подробнее здесь

ASP.NET автоматически кодирует и декодирует все необходимые символы, как это, поэтому вам не нужно беспокоиться о них.

...