Escapar/Desescapar HTML
Converte caracteres especiais como &, <, >, " e ' em entidades HTML (escapar), ou converte entidades de volta aos caracteres originais (desescapar). Útil para prevenir XSS e inserir texto em HTML.
Principais entidades HTML nomeadas
| Caractere | Entidade nomeada | Referência numérica | Descrição |
|---|---|---|---|
| & | & | & | E comercial (símbolo de "e") |
| < | < | < | Sinal de menor que (igual ao caractere de abertura de uma tag HTML) |
| > | > | > | Sinal de maior que (igual ao caractere de fechamento de uma tag HTML) |
| " | " | " | Aspas duplas (delimitador de valores de atributo) |
| ' | ' | ' | Aspa simples (delimitador de valores de atributo) |
| |   | Espaço inseparável (um espaço que impede a quebra de linha) | |
| © | © | © | Símbolo de copyright |
| ® | ® | ® | Símbolo de marca registrada |
| ™ | ™ | ™ | Símbolo de marca comercial |
| € | € | € | Símbolo do euro |
| ¥ | ¥ | ¥ | Símbolo do iene |
| ¢ | ¢ | ¢ | Símbolo de centavo |
Dicas
- O escape de HTML é a base da prevenção de XSS (cross-site scripting). Sempre escape a entrada do usuário antes de inseri-la no HTML.
- O caractere
&deve sempre ser escapado primeiro. Se você converter outros caracteres antes, o&dentro do&recém-gerado acabará sendo escapado duas vezes. - Ao inserir uma string dentro de um valor de atributo, é mais seguro escapar tanto
"(aspas duplas) quanto'(aspa simples), não apenas uma delas. - Esta ferramenta consegue desescapar referências numéricas decimais (
&), referências numéricas hexadecimais (&) e as principais entidades nomeadas (como&). - Muitos motores de template (Blade, JSX, Vue etc.) escapam o HTML automaticamente ao interpolar variáveis, mas se você usar uma sintaxe de "saída HTML bruta" como
{!! !!}ou v-html, precisará escapar o valor manualmente.
Perguntas frequentes
<, > e & — são especiais porque os analisadores de HTML os interpretam como parte da própria sintaxe. Se não forem escapados, o navegador pode confundi-los com o início ou o fim de uma tag, o que pode causar layouts quebrados ou XSS (injeção de scripts maliciosos).&, <, >, " e '. Caracteres não ASCII, como emojis e textos em outros idiomas, são exibidos com segurança tal como estão em ambientes UTF-8 modernos, então não precisam de conversão.
Curiosidade — O mecanismo de "referências de caracteres" herdado do SGML
A origem das entidades HTML (referências de caracteres) remonta ao SGML (Standard Generalized Markup Language), o predecessor do HTML. O SGML, padronizado em 1986, já possuía um mecanismo de "referência de caractere" para permitir o uso do caractere delimitador de tags < dentro do próprio texto. O HTML herdou esse mecanismo quase sem alterações, e entidades nomeadas básicas como <, > e & já estavam definidas nas primeiras especificações do HTML, ainda na década de 1990.
As entidades nomeadas foram originalmente valorizadas como uma forma de exibir símbolos especiais de impressão (como o símbolo de copyright ©, o de marca registrada ® e diversas letras gregas) em ambientes ASCII, antes da popularização do Unicode. A especificação HTML5 chegou a definir mais de 2.000 entidades nomeadas, cobrindo até símbolos menores como marcas de verificação e notas musicais.
Hoje, a difusão da codificação UTF-8 reduziu bastante a necessidade de referências de caracteres para evitar texto corrompido. No entanto, três caracteres — <, > e & — ainda precisam ser escapados por um motivo completamente diferente. Eles têm um significado sintático especial para os analisadores de HTML (o início de uma tag, o fim de uma tag e o início de uma entidade), então deixar de escapá-los pode causar diretamente layouts quebrados ou vulnerabilidades de XSS.