Зачем вам нужно кодировать URL-адреса? Есть ли веская причина, по которой вам нужно изменить каждое пространство в данных GET на %20
?
Зачем вам нужно кодировать URL-адреса?
Ответ 1
Из RFC 2936, раздел 2.4.3:
Символ пробела исключается потому что значительные пробелы могут исчезнуть и незначительные пробелы могут быть введено, когда URI транскрибируются или набирать или подвергать обработка текстовой обработки программы. Пробелы также используются для разграничить URI во многих контекстах.
Ответ 2
Поскольку некоторые символы имеют особые значения.
Например, в строке запроса амперсанд (&
) используется как разделитель между парами ключ-значение. Если бы вы ввели амперсанд в одно из этих значений, это будет выглядеть как разделитель между окончанием значения и началом следующего ключа. Поэтому для специальных символов, подобных этому, мы используем процентное кодирование, чтобы мы могли быть уверены, что данные однозначно закодированы.
Ответ 3
- изначально старые браузеры могли путаться пробелами (на самом деле это не проблема).
- теперь, если кто-то копирует URL-адрес для отправки в качестве ссылки - пространство может сломать гиперссылку - т.е.
Эй! Проверьте этот дергающий кот, играющий на пианино!
http://www.mysite.com/?video=funny cat plays piano.
Посмотрите, как разрыв ссылки?
Теперь посмотрим на это:
http://www.mysite.com/?video=funny%20cat%20plays%20piano.
Ответ 4
Хорошо, вы это делаете, потому что каждый браузер знает, как закодирована строка, составляющая URL. преобразование пространства в %20 и т.д. делает этот URL/URI переносимым. Это может быть латинский-1, он может быть unicode. Он нуждается в нормализации к чему-то, что понимается повсеместно. Взгляните на rfc3986 http://tools.ietf.org/html/rfc3986#section-2.1