Почему я должен использовать urlencode?
Я пишу веб-приложение и учусь urlencode html-ссылки...
все вопросы urlencode здесь (см. тег ниже)являются "как...?" вопросы.
мой вопрос не "как?"но" почему?".
даже статья Википедии касается только механики этого:
http://en.wikipedia.org/wiki/Urlencode
но не почему я должен использовать urlencode в моем приложении вообще.
каковы безопасность последствия использования (или не использования) функция urlencode?
как может отказ использовать urlencode быть эксплуатируется?
какой ошибки или сбои могут возникнуть с некодированными URL-адресами?
Я спрашиваю, потому что даже без urlencode ссылка на мой веб-сайт application dev, как и ожидалось, работает:
http://myapp/my%20test/ée/ràé
почему должен ли я использовать urlencode?
или иначе говоря:
, когда должен ли я использовать urlencode? В каких ситуациях?
5 ответов
обновление: есть еще лучшее объяснение (imo) выше:
URI представляется как последовательность символов, а не как последовательность октетов. Это потому, что URI может быть "транспортирован" с помощью не через компьютерную сеть, например, напечатанный на бумаге, прочитанный сверх радио и т. д.
и
для исходных последовательностей символов, содержащих символы, отличные от ASCII, однако, ситуация более сложная. Интернет-протоколы, которые передача октетных последовательностей, предназначенных для представления символьных последовательностей предполагается, что они обеспечат некоторый способ идентификации используемой кодировки, если может быть более одного [RFC2277]. Однако в настоящее время не предоставление в общий синтаксис URI для этого идентификация. Для отдельной схемы URI может потребоваться один charset, определите кодировку по умолчанию или укажите способ указания кодировка используемый.
потому что это говорится в RFC:
2.4. Escape-Последовательности
данные должны быть экранированы, если они не имеют представления с помощью неограниченный символ; это включает данные, которые не соответствуют печатаемый символ кодированного набора символов US-ASCII или соответствует любому символу US-ASCII, который запрещен, как объяснимый под.
и
2.4.2. Когда бежать и Unescape
URI всегда находится в "экранированной" форме, так как экранирование или unescaping a завершенный URI может изменить свою семантику. Нормально, единственное время escape-кодировки могут быть безопасно сделаны, когда создается URI из ее составных частей; каждый компонент может иметь свой собственный набор символы, которые зарезервированы, поэтому только механизм, ответственный за генерирующий или интерпретация этого компонента может определить, изменит ли экранирование символа его семантику. Кроме того, Ури должен быть разделен на его компоненты перед экранированными символами внутри этих компонентов можно безопасно расшифровать.
в некоторых случаях данные, которые могут быть представлены символ может казаться экранированным; например, некоторые из unreserved некоторые системы автоматически экранируют символы "mark". Если данный URI схема определяет алгоритм канонизации, затем в соответствии с этим алгоритмом необслуживаемые символы могут не сопровождаться. Например, "%7e "иногда используется вместо" ~ " в URL http путь, но эти два эквивалентны для URL-адреса http.
потому что символ процента " % " всегда имеет зарезервированную цель будучи индикатором escape, он должен быть экранирован как "%25", чтобы используется в качестве данных в URI. Исполнители должны быть осторожны, чтобы не побег или раскодировал одну и ту же строку более одного раза, поскольку невыход уже непереведенная строка может привести к неправильной интерпретации процента символ данных как другой экранированный символ или наоборот в случай выхода из уже экранированной строки.
есть RFCs (http://www.faqs.org/rfcs/rfc1738.html и тому подобное), которые определяют формат URL-адресов, и разработчики браузеров/веб-серверов полагаются на это как на стандарт для интерпретации данных. Если вы не подчинитесь, результаты могут быть непредсказуемыми.
HTTP URL имеет свою спецификацию, и в нем говорится, что практически все нелатинские символы должны быть закодированы.
две причины, которые я мог придумать:
- это действительно зависит от того, как вы анализируете свою сторону сервера запросов. Например. передача параметров с помощью запроса GET HTTP будет иметь проблемы, если есть такие символы, как
&
внутри какой-то параметр. - Это позволяет обрабатывать символы, отличные от ansi, так, как вы хотели бы (вы диктуете кодировку). В противном случае браузер может передать их в какой-то случайной кодировке (не думайте, что это действительно определено в любом стандарте; исправьте меня, если я неправильный.)
основная причина-это по существу побег символы, которые будут включены в URL-адрес вашей веб-страницы.
предположим, что пользователь вводит поле формы пользователя как "& joe", и мы хотели бы перенаправить на страницу, содержащую это имя как часть URL-адреса, используя кодировку URL-адреса, это было бы, например:
localhost/index.php?name=%26joe //note how the ampersand is escaped
Если вы не использовали urlencoding, вы в конечном итоге:
localhost/index.php?name=&joe
и этот амперсанд вызовет всевозможную непредсказуемость
Как вы отличите, если ваши два пути похожи на это
http://myapp/my%20test/
и
http://myapp/my test/
Примечание пробел & %20 является частью URL.