Diferença entre codificação de URL e codificação de HTML

86

Qual é a diferença entre uma codificação de URL e uma codificação de HTML ?

Quintin Par
fonte
5
Se você deseja codificar para uso em um URL, use a codificação de URL. Se você quiser codificar para exibição em uma página HTML, faça a codificação HTML
Mitch Wheat
4
A codificação de URL codificará os caracteres para que sejam válidos para URLs. Por exemplo, ?torna-se %3FHTML codificar irá codificar caracteres para que sejam válidos para HTML. Por exemplo, <torna&lt;
Matt Ellen

Respostas:

85

A codificação HTML escapa de caracteres especiais em strings usadas em documentos HTML para evitar confusão com elementos HTML, como alterações

"<hello>world</hello>" 

para

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

A codificação de URL faz algo semelhante para valores de string em um URL, como alterar

"hello+world = hello world"

para

"hello%2Bworld+%3D+hello+world"
mmx
fonte
15
A codificação HTML e a codificação de URL fazem coisas fundamentalmente diferentes. Se você codificar HTML, por exemplo, 'hello world' e tentar adicioná-lo a um url, obterá um url inválido. Ambos são importantes e devem ser usados ​​para diferentes situações.
Neil
1
Apenas tive que substituir vários usos de HtmlEncode para codificação de urls com UrlEncoding, problemas com codificação de espaços e alguns outros caracteres especiais
PJUK
Cuidado, usar HtmlEncode no lugar de UrlEncode pode ser problemático para URLs, já que HtmlEncode coloca caracteres "&" em toda a sua string. Dependendo do que seu serviço da web que recebe o URL espera, alguns caracteres "&" extras podem ser muito problemáticos. Por exemplo, se seu serviço da web espera que cada parâmetro em um URL seja precedido por um caractere "&", mas você usou HtmlEncode que adicionou um monte de caracteres "&" extras, provavelmente receberá um erro quando seu serviço da web tenta interpretar o URL. Eu apenas tive que substituir vários usos de HtmlEncode por UrlEncode exatamente por esse motivo.
jdnew18
3
Por favor, não dê ouvidos a Phill. Acho impossível acreditar que ele está usando strings de consulta e criando urls modernos usando HtmlEncode em vez de UrlEncode. Dizer que UrlEncode é praticamente inútil é uma das coisas mais absurdas que já vi neste site.
Nard Dog
23

urlEncode substitui caracteres especiais por caracteres que podem ser entendidos por navegadores / servidores web com a finalidade de endereçar ... portanto, URL. Por exemplo, os espaços são substituídos por% 20, '=% 27 etc ...

Veja essas referências:

HtmlEncode substitui caracteres especiais por cadeias de caracteres que são reconhecidas pelo próprio mecanismo de HTML para renderizar o conteúdo da página - coisas como & tornam &amp; or < = &lt; > = &lt;- se isso impedem que o mecanismo de HTML interprete esses caracteres como partes da marcação HTML e, portanto, os processe como se fossem cordas.

Veja esta referência:

BenAlabaster
fonte
Na verdade, URLEncode substitui espaços por +, o que pode ser um problema em algumas situações.
NetMage
13

Tanto o HTML quanto o URL são linguagens essencialmente restritas . Como linguagem, eles adicionam significado a palavras-chave ou operadores específicos. Para ambos os idiomas, porém, as palavras-chave quase sempre têm um único caractere. Por exemplo

  • HTML:> e <
  • URL: / e:

No entanto, no uso de cada linguagem é possível usar essas construções de uma maneira que não garante o significado da linguagem. Por exemplo, esta postagem contém um personagem>. Não quero que seja interpretado como HTML, apenas texto.

É aqui que os métodos Encode e Decode entram em ação. Esses métodos tomarão respectivamente uma string e converterão qualquer um dos caracteres que, de outra forma, seriam tratados como palavras-chave em uma forma de escape que não será interpretada como parte do idioma.

Por exemplo: Passar> para HtmlEncode retornará & gt;

JaredPar
fonte
3

HTMLEncode e URLEncode lidam com caracteres inválidos em HTML e URLs, ou mais precisamente, caracteres que precisam ser especialmente escritos para serem interpretados corretamente. Por exemplo, em HTML, os caracteres <e> são usados ​​para indicar tags. Portanto, se você quiser escrever uma fórmula matemática, algo como 1 + 1 <2 + 2, o '<' normalmente seria interpretado como o início de uma tag. HTMLEncoding transforma esse caractere em "& lt;" que é a representação codificada do sinal de menos que. URLEncoding faz o mesmo, mas para URLs, para os quais os caracteres especiais são diferentes, embora haja alguma sobreposição.

Michael Bray
fonte
1

Não sei em qual linguagem você está trabalhando, mas o manual do PHP, por exemplo, fornece boas explicações.

URLEncode

Retorna uma string na qual todos os caracteres não alfanuméricos, exceto -_. foram substituídos por um sinal de porcentagem (%) seguido por dois dígitos hexadecimais e espaços codificados como sinais de mais (+). Ele é codificado da mesma forma que os dados postados de um formulário WWW são codificados, ou seja, da mesma forma que no tipo de mídia application / x-www-form-urlencoded. Isso difere da codificação »RFC 1738 (consulte rawurlencode ()) porque, por razões históricas, os espaços são codificados como sinais de mais (+).

Leia

Pekka
fonte