Почему URL кодировать, или какие символы кодировать - PullRequest
12 голосов
/ 01 февраля 2012

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

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

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

Ответы [ 4 ]

8 голосов
/ 01 февраля 2012

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

См. в этом введении для получения более подробных указаний.

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

6 голосов
/ 01 февраля 2012

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

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

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

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

, а у Гюнтера будет

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

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

1 голос
/ 01 февраля 2012

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

1 голос
/ 01 февраля 2012

Вот, пожалуйста,

Когда вы должны использовать escape вместо encodeURI / encodeURIComponent?

Это лучшее объяснение, которое я нашел и помогло мне.

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