Зачем вам нужно кодировать URL? - PullRequest
36 голосов
/ 28 января 2010

Зачем вам нужно кодировать URL? Есть ли веская причина, почему вы должны изменить каждое пространство в данных GET на %20?

Ответы [ 4 ]

35 голосов
/ 10 августа 2012

Потому что некоторые символы имеют особое значение.

Например, в строке запроса амперсанд (&) используется в качестве разделителя между парами ключ-значение. Если вы поместите амперсанд в одно из этих значений, он будет выглядеть как разделитель между концом значения и началом следующего ключа. Поэтому для таких специальных символов, как этот, мы используем процентное кодирование, чтобы быть уверенными, что данные зашифрованы однозначно.

30 голосов
/ 28 января 2010

С RFC 2936 , раздел 2.4.3:

Символ пробела исключен потому что значительные пространства могут исчезают и незначительные места могут вводиться при расшифровке URI или набрано или подвергается обработка текстовой обработки программы. Пробел также используется для разграничить URI во многих контекстах.

11 голосов
/ 11 августа 2012
  • Изначально старые браузеры могли запутаться из-за пробелов (больше не проблема).
  • Теперь, если кто-то скопирует URL-адрес для отправки в качестве ссылки - пробел может разорвать гиперссылку - т.е.

Эй! Посмотри на этого сумасшедшего кота, играющего на пианино!

http://www.mysite.com/?video=funny cat plays piano.

Видишь, как ломается ссылка?

Теперь посмотрите на это:

http://www.mysite.com/?video=funny%20cat%20plays%20piano.
0 голосов
/ 28 января 2010

Ну, вы делаете это, потому что каждый браузер знает, как кодируется строка, которая составляет URL преобразование пространства в% 20 и т. д. делает этот URL / URI переносимым. Это может быть латиница-1, это может быть Unicode. Это нужно нормализовать к чему-то, что понимается повсеместно. Взгляните на rfc3986 http://tools.ietf.org/html/rfc3986#section-2.1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...