Почему кодируется URL-адрес запятой?

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

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

и

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

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

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

Я хочу сделать что-то вроде qaru.site/questions/235280/....

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

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

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

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

16
ответ дан 12 янв. '12 в 3:53
источник

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

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

Список допустимых символов URL

Unreserved - может быть закодирован, но он не нужен

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 - _ . ~

Зарезервировано - иногда нужно кодировать

! * ' ( ) ; : @ & = + $ , / ? % # [ ]
7
ответ дан 30 апр. '12 в 17:30
источник

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

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

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

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

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

2
ответ дан 12 янв. '12 в 3:42
источник

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

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

-1
ответ дан 12 янв. '12 в 3:46
источник