Почему я должен использовать urlencode?

Я пишу веб-приложение и узнаю, как ссылки urlencode html …

Все вопросы о urlencode здесь (см. Ниже) – «Как …?» вопросов.

Мой вопрос не “Как?” но почему?”.

Даже статья в Википедии касается только механики:
http://en.wikipedia.org/wiki/Urlencode, но не почему я должен использовать urlencode в своем приложении вообще.

Каковы последствия для безопасности использования (или, скорее, не использования) urlencode?

Как можно использовать отказ использования urlencode?

Какие ошибки или сбои могут возникать при использовании некодированных URL-адресов?

Я прошу, потому что даже без urlencode, ссылка на мой веб-сайт приложения dev, как и работает, http://myapp/my%20test/ée/ràé следующим образом: http://myapp/my%20test/ée/ràé

Почему я должен использовать urlencode?

Или другой способ выразить это:

Когда следует использовать urlencode? В каких ситуациях?

Обновление: есть еще более подробное объяснение (imo):

URI представляется как последовательность символов, а не как последовательность октетов. Это связано с тем, что URI можно «protractorовать» с помощью средств, которые не проходят через компьютерную сеть, например, печатаются на бумаге, считываются по радио и т. Д.

а также

Однако для исходных последовательностей символов, содержащих символы, отличные от ASCII, ситуация сложнее. Предполагается, что интернет-протоколы, которые передают последовательности октетов, предназначенные для представления последовательностей символов, обеспечивают определенный способ идентификации используемой кодировки, если может быть несколько [RFC2277]. Тем не менее, в настоящее время в синтаксисе общего URI нет такого положения, чтобы выполнить эту идентификацию. Для индивидуальной схемы URI может потребоваться одна кодировка, определить кодировку по умолчанию или указать способ обозначения используемой кодировки.


Потому что это указано в RFC :

2,4. Последовательности выхода

Данные должны быть экранированы, если у него нет представления с использованием незарезервированного символа; это включает данные, которые не соответствуют печатаемому символу кодированного набора символов US-ASCII или соответствуют любому символу US-ASCII, который запрещен, как объясняется ниже.

а также

2.4.2. Когда побегать и бежать

URI всегда находится в «экранированной» форме, поскольку экранирование или удаление завершенного URI может изменить его семантику. Как правило, единственные временные коды кодирования могут быть безопасно сделаны, когда URI создается из его составных частей; каждый компонент может иметь свой собственный набор символов, которые зарезервированы, поэтому только механизм, ответственный за генерацию или интерпретацию этого компонента, может определить, будет ли экранирование символа изменять его семантику. Аналогично, URI должен быть разделен на его компоненты, прежде чем экранированные символы внутри этих компонентов могут быть безопасно декодированы.

В некоторых случаях данные, которые могут быть представлены незарезервированным символом, могут быть экранированы; например, некоторые из безоговорочных символов «метки» автоматически экранируются некоторыми системами. Если заданная схема URI определяет алгоритм канонизации, то безоговорочные символы могут быть неэкранированы в соответствии с этим алгоритмом. Например, вместо «~» иногда используется «% 7e» в URL-адресе http-адреса, но они эквивалентны для URL-адреса http.

Поскольку для символа процента «%» всегда имеется зарезервированная цель быть индикатором выхода, он должен быть экранирован как «% 25», чтобы использоваться как данные в URI. Разработчики должны быть осторожны, чтобы не выходить из строя или не снимать одну и ту же строку более одного раза, поскольку unescaping уже не привязанной строки может привести к неверному истолкованию символа процента данных в качестве другого экранированного символа или наоборот в случае экранирования уже экранированной строки.

Существуют RFC ( http://www.faqs.org/rfcs/rfc1738.html и т. П.), Которые определяют формат URL-адресов, и разработчики браузера / веб-сервера полагаются на это как стандарт для интерпретации данных. Если вы не соблюдаете, результаты могут быть непредсказуемыми.

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

Две причины, о которых я мог подумать:

  • Это действительно зависит от того, как вы разбираете сервер вашего запроса. Например, передача параметров с использованием HTTP-запроса GET будет иметь проблемы, если есть такие символы, как & внутри некоторого параметра.
  • Он позволяет обрабатывать символы не-ansi так, как вам хотелось бы (вы определяете кодировку). В противном случае браузер может передать их в некотором случайном кодировании (не думайте, что это действительно определено в любом стандарте, исправьте меня, если я ошибаюсь).

Как вы различаете, как ваши два пути подобны этому?

 http://myapp/my%20test/ 

а также

 http://myapp/my test/ 

Место для заметок &% 20 является частью URL.

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

Предположим, что пользователь вводит поле формы пользователя как «& joe», и мы хотели бы перенаправить на страницу, которая содержит это имя как часть URL-адреса, используя URL-кодировку, тогда это будет, например:

 localhost/index.php?name=%26joe //note how the ampersand is escaped 

Если вы не использовали urlencoding, у вас получится:

 localhost/index.php?name=&joe 

и что амперсанд вызовет всевозможные непредсказуемость

  • Параметры запроса URL-адреса в Java
  • Как вы используете UrlEncode без использования System.Web?
  • Как заменить все пробелы на% 20 в C #?
  • URLEncoder не способен переводить символ пробела
  • Когда закодировать пробел до плюс (+) или% 20?
  • Кодировать / декодировать URL-адреса в C ++
  • На Android сделайте запрос POST с данными URL-кодированной формы без использования UrlEncodedFormEntity
  • Должен ли я кодировать данные POST?
  • В чем разница между EscapeUriString и EscapeDataString?
  • Кодирование URL в Android
  • Interesting Posts

    Использование PowerMockito.whenNew () не получает издевательства и вызывается оригинальный метод

    Как избежать многого, если иначе условия

    Общее количество элементов, определенных в перечислении

    Как восстановить данные с моего диска – я случайно скопировал с dd iso на нем

    Как добавить новый столбец в фреймворк данных (на передний план не заканчивается)?

    Как выполнить .sh-файл в Windows?

    Маршрутизатор / шлюз на базе ПК, который поддерживает законный перехват?

    Ошибка раздувания classа android.support.v4.view.ViewPager

    Как заставить родительский элемент появиться над дочерним элементом

    Почему встроенные видео YouTube перестали работать в Google Chrome?

    Почему «abcd» .StartsWith («») возвращает true?

    Как очистить текущую строку командной строки Windows?

    Как я могу расширить охват wifi?

    Планирование JavaBean с помощью свойств JavaFX

    Как создать пользовательскую команду с параметрами

    Давайте будем гением компьютера.