Codificador e decodificador de entidades HTML

Codifique ou decodifique entidades HTML como um navegador, mais escapes JS e CSS.

Direction

Escapes for code

JavaScript string

<p class=\"note\">Caf\u00E9 & cr\u00E8me \u2014 \"5 > 3\" isn\'t news. Gi\u00E1: 25.000 \u20AB \u{1F600}</p>

JavaScript (ES5, surrogate pairs)

<p class=\"note\">Caf\u00E9 & cr\u00E8me \u2014 \"5 > 3\" isn\'t news. Gi\u00E1: 25.000 \u20AB \uD83D\uDE00</p>

CSS content string

<p class=\22note\22>Caf\E9 & cr\E8me \2014 \22 5 > 3\22 isn\27t news. Gi\E1: 25.000 \20AB \1F600</p>

O que faz

Codificar transforma texto em referências de caracteres HTML: só os cinco reservados (& < > " '), esses mais tudo que não é ASCII, ou tudo. Elas podem ser escritas por nome (&eacute;), em decimal (&#233;) ou em hexadecimal (&#xE9;). Decodificar usa a tabela completa de 2125 nomes do HTML5 e as mesmas regras dos navegadores, inclusive em valores de atributo. Abaixo aparecem os escapes equivalentes para strings JavaScript e para content no CSS.

Quando são necessárias

Numa página UTF-8 qualquer caractere pode ser escrito direto. O que sempre precisa de escape é & e < no texto, e as aspas do atributo no seu valor. Os 106 nomes herdados do HTML 4 funcionam sem ponto e vírgula, exceto em atributos antes de = ou de letra ou dígito, o que protege URLs como ?a=1&copy=2.

Escapar não é sanitizar

Escapar os caracteres reservados protege o texto da página e atributos entre aspas contra XSS, mas não dentro de <script>, de style, de manipuladores de eventos nem de URLs.

Perguntas frequentes

Preciso de &eacute; numa página UTF-8?

Não. Só &, <, > e as aspas do atributo precisam de escape.

Por que &copy=2 não muda num atributo?

Em valores de atributo, nomes herdados sem ponto e vírgula não são decodificados antes de = ou de letra ou dígito, para não quebrar URLs.

Escapar HTML evita XSS?

No texto e em atributos entre aspas, sim; em scripts, estilos, eventos e URLs são necessárias outras regras.