Зачем кодировать url или какие символы кодировать

http://www.w3schools.com/tags/ref_urlencode.asp

Поскольку URL-адреса часто содержат символы вне набора ASCII, URL-адрес имеет для преобразования в действительный формат ASCII.

Но оба пространства, /,% являются частью набора символов ASCII, поэтому зачем кодировать их в первую очередь? Какие символы должны быть закодированы?

Ответ 1

Как отмечено, пробелы в URL-адресах недействительны. Большинство браузеров orlencode их автоматически. Однако...

На странице, на которую вы ссылаетесь, приведен пример с использованием слова "Günter" в разделе "Попробовать". Если слово "Günter" было отправлено как параметр querystring, это не сработало. поскольку "ü" не находится в стандартном наборе символов ASCII.

Он предназначен для использования, когда есть потенциально не-ASCII-символы. Примером может быть использование данных из базы данных для создания гиперссылки. Предположим, что код создает ссылку на страницу профиля пользователя. Unencoded, мой будет:

<a href="profile/?username=David Stratton">Your profile</a>

в то время как Günter будет

<a href="profile/?username=Günter">Your profile</a>

Моя, большинство браузеров могут справиться. Гюнтер, вероятно, нет.

Закодированные, это станет

<a href="profile/?username=David%20Stratton">Your profile</a>

и

<a href="profile/?username=G%FCnter">Your profile</a>

которые являются действительными URL-адресами.

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

Ответ 2

Символы в URL-адресе должны быть закодированы, потому что некоторые символы имеют особое значение в соответствии с спецификацией URL-адреса, некоторые символы недопустимы, а некоторые символы не представляются во всех наборах символов.

См. это введение для получения более подробной информации.

Относительно примеров символов, которые вы даете '/', зарезервировано для использования в качестве разделителя компонентов в URL-адресах, а '%' используется как escape-символ.

Ответ 4

Некоторые символы, такие как пробелы, должны быть экранированы для обеспечения правильных URL-адресов. Когда-то место, где это обязательно придумает много, - это генерировать параметры GET.