Разница между кодированием URL и кодированием HTML

86

В чем разница между URL Encode и HTML Encode ?

Квинтин Пар
источник
5
Если вы хотите кодировать для использования в URL-адресе, вы используете кодирование URL-адреса. Если вы хотите кодировать для отображения на странице HTML, вы кодируете его в HTML
Митч Уит,
4
Кодирование URL-адресов будет кодировать символы, чтобы они были действительны для URL-адресов. Например, ?становится %3FHTML, кодирует символы, поэтому они действительны для HTML. Например, <становится&lt;
Мэтт Эллен

Ответы:

85

Кодирование HTML экранирует специальные символы в строках, используемых в документах HTML, чтобы предотвратить путаницу с элементами HTML, такими как изменение

"<hello>world</hello>" 

к

"&lt;hello&gt;world&lt;/hello&gt;"

Кодировка URL-адреса делает то же самое для строковых значений в URL-адресе, например изменение

"hello+world = hello world"

к

"hello%2Bworld+%3D+hello+world"
ммх
источник
15
Кодирование HTML и кодирование URL принципиально разные вещи. Если вы закодируете HTML, например, "hello world" и попытаетесь добавить его к URL-адресу, вы получите недопустимый URL-адрес. Оба важны и должны использоваться в разных ситуациях.
Нил
1
Просто нужно было пройти и заменить несколько вариантов использования HtmlEncode для кодирования URL-адресов на UrlEncoding, проблемы с кодированием пробелов и некоторых других специальных символов
PJUK
Остерегайтесь, использование HtmlEncode вместо UrlEncode может быть проблематичным для URL-адресов, поскольку HtmlEncode помещает символы «&» по всей вашей строке. В зависимости от того, что ожидает ваш веб-сервис, получающий URL-адрес, использование нескольких дополнительных символов «&» может быть очень проблематичным. Например, если ваша веб-служба ожидает, что каждому параметру в URL-адресе будет предшествовать символ «&», но вы использовали HtmlEncode, который добавил кучу дополнительных символов «&», вы, вероятно, получите сообщение об ошибке, когда ваша веб-служба пытается интерпретировать URL. Мне просто пришлось заменить несколько вариантов использования HtmlEncode на UrlEncode именно по этой причине.
jdnew18
3
Пожалуйста, не слушайте Филла. Мне невозможно поверить, что он использует строки запроса и создает современные URL-адреса, используя HtmlEncode вместо UrlEncode. Утверждать, что UrlEncode практически бесполезен, - одна из самых абсурдных вещей, которые я когда-либо видел на этом сайте.
Nard Dog
23

urlEncode заменяет специальные символы символами, которые могут быть поняты веб-браузерами / веб-серверами с целью адресации ... следовательно, URL. Например, пробелы заменяются на% 20, '=% 27 и т. Д.

См. Эти ссылки:

HtmlEncode заменяет специальные символы символьными строками, которые распознаются самим механизмом HTML для отображения содержимого страницы - такие вещи, как &, не &amp; or < = &lt; > = &lt;позволяют механизму HTML интерпретировать эти символы как части разметки HTML и, следовательно, отображать их так, как если бы они были струны.

См. Эту ссылку:

БенАлабастер
источник
На самом деле URLEncode заменяет пробелы на +, что может быть проблемой в некоторых ситуациях.
NetMage 06
13

И HTML, и URL-адреса по сути являются очень ограниченными языками . В качестве языка они добавляют значение определенным ключевым словам или операторам. Однако для обоих этих языков ключевые слова почти всегда состоят из одиночных символов. Например

  • HTML:> и <
  • URL: / и:

Однако при использовании каждого языка эти конструкции можно использовать таким образом, который не обеспечивает значения языка. Например, этот пост содержит символ>. Я не хочу, чтобы это интерпретировалось как HTML, просто текст.

Здесь в игру вступают методы кодирования и декодирования. Эти методы соответственно принимают строку и преобразуют любые символы, которые в противном случае обрабатывались бы как ключевые слова, в экранированную форму, которая не будет интерпретироваться как часть языка.

Например: передача> в HtmlEncode вернет & gt;

ДжаредПар
источник
3

HTMLEncode и URLEncode имеют дело с недопустимыми символами в HTML и URL-адресах или, точнее, с символами, которые необходимо специально написать для правильной интерпретации. Например, в HTML символы <и> используются для обозначения тегов. Таким образом, если вы хотите написать математическую формулу, например, 1 + 1 <2 + 2, '<' обычно интерпретируется как начало тега. HTMLEncoding превращает этот символ в "& lt;" который представляет собой закодированное представление знака «меньше». URLEncoding делает то же самое, но для URL-адресов, для которых специальные символы разные, хотя есть некоторое перекрытие.

Майкл Брей
источник
1

Я не знаю, на каком языке вы работаете, но, например, руководство по PHP дает хорошие объяснения.

URLEncode

Возвращает строку, в которой все не буквенно-цифровые символы, кроме -_. были заменены знаком процента (%), за которым следуют две шестнадцатеричные цифры и пробелы, закодированные как знаки плюс (+). Он кодируется так же, как и отправленные данные из формы WWW, то есть так же, как и в типе мультимедиа application / x-www-form-urlencoded. Это отличается от кодировки »RFC 1738 (см. Rawurlencode ()) тем, что по историческим причинам пробелы кодируются как знаки плюс (+).

Читать дальше

Пекка
источник