Ferramenta de escape / desescape HTML
Escapar HTML transforma caracteres como <, > e & em entidades HTML seguras. Os navegadores então os exibem como texto visível em vez de interpretá-los como marcação. Desenvolvedores lidam com escape e desescape HTML o tempo todo: ao renderizar comentários, embutir trechos de código ou decodificar HTML extraído. Pular essa etapa, ou usar a ferramenta errada, pode quebrar o layout da página ou deixar a marcação malformada.
Este codificador e decodificador gratuito de entidades HTML funciona inteiramente no seu navegador. Não há upload para servidor, cadastro nem dados saindo do seu dispositivo. Alterne entre escapar e desescapar instantaneamente, escolha saída nomeada ou numérica e obtenha resultados limpos e corretamente organizados sempre. Esteja você higienizando um campo de comentários ou decodificando uma resposta de API, esta ferramenta de escape HTML acerta de primeira.
Ferramenta de escape / desescape HTML
Converta texto bruto em entidades HTML seguras ou decodifique entidades de volta para texto legível.
O que é escape HTML (e desescape)?
Escapar HTML substitui caracteres com significado especial em HTML por suas entidades correspondentes. Os principais são <, >, &, " e '. Sem escape, um < ou & solto pode quebrar o layout ou ser interpretado como marcação.
Desescapar HTML faz o processo inverso e converte entidades de volta para seus caracteres originais. < volta a ser < e & volta a ser &. Isso é útil ao ler conteúdo vindo de uma API, feed RSS ou exportação de CMS.
Às vezes você verá isso descrito como HTML escape / unescape como uma operação combinada. Seja chamando de codificação/decodificação de entidades ou simplesmente escape e desescape, esta ferramenta cobre os dois sentidos.
Como funciona o escape HTML
O escape HTML funciona caractere por caractere, e não byte por byte como codificações binárias. Cada caractere reservado é mapeado para uma entidade HTML específica, nomeada como & ou numérica como &.
Entidades nomeadas são mais legíveis. Entidades numéricas funcionam para qualquer caractere, mesmo sem nome definido. A ordem também importa: & deve ser escapado primeiro para evitar dupla codificação.
Aqui vai um exemplo real com a string 5 < 10 & true. Cada caractere reservado é substituído em uma passada da esquerda para a direita, enquanto o restante do texto permanece intacto.
Cada caractere reservado vira exatamente uma entidade, então não há um aumento geral de tamanho como no Base64. A maior parte do texto passa sem alterações.
Caractere reservado encontrado | Posição na string | Entidade HTML |
|---|---|---|
| < | depois de `5 ` | < |
| & | depois de `10 ` | & |
Resultado:5 < 10 & true→5 < 10 & true
Como usar esta ferramenta de escape / desescape HTML
Precisa escapar HTML online sem instalar nada? O fluxo aqui é simples: escolha o modo, cole a entrada, selecione o formato de saída para o escape e copie o resultado. Tudo roda localmente no navegador.
A saída escapada mantém seu texto original e adiciona apenas as entidades seguras necessárias. Para voltar ao texto puro, cole, clique em Desescapar e copie. Se o resultado não mudar, sua entrada não tinha caracteres que precisassem de escape.
- Escolha Escapar para codificar texto bruto, ou Desescapar para converter entidades HTML de volta em texto.
- Cole seu texto ou trecho HTML na caixa de entrada.
- No modo Escapar, selecione Entidades nomeadas como
&ou Entidades numéricas como&. - Clique em Escapar HTML ou Desescapar HTML e o resultado aparecerá imediatamente.
- Use Copiar saída para aproveitar o resultado ou Trocar entrada/saída para inverter a operação.
Exemplos práticos
Uma única palavra não mostra bem como o escape e o desescape HTML se comportam com conteúdo real. A tabela abaixo apresenta cinco cenários comuns, de uma frase simples a um trecho HTML completo.
Observe o exemplo de comparação: ele escapa < e & na mesma passada e na ordem correta. Escapar & primeiro evita que < e > virem &lt; e &gt;.
Cenário | Entrada | Saída |
|---|---|---|
| Frase simples com E comercial | `Tom & Jerry` | `Tom & Jerry` |
| Trecho HTML | `<div class="card">Hi</div>` | `<div class="card">Hi</div>` |
| Valor de atributo com apóstrofo | `Jenny's "Big" Sale` | `Jenny's "Big" Sale` |
| Texto de comparação | `5 < 10 && 10 > 5` | `5 < 10 && 10 > 5` |
| Exemplo de desescape | `Tom & Jerry's "Big" Sale` | `Tom & Jerry's "Big" Sale` |
Referência de entidades HTML comuns
Apenas cinco caracteres precisam ser escapados na maioria dos contextos HTML, embora alguns extras também sejam úteis. A tabela abaixo cobre o conjunto mais comum e alguns símbolos tipográficos adicionais.
Entidades nomeadas como © são mais fáceis de ler no código-fonte. Entidades numéricas como © funcionam mesmo quando um caractere não tem nome definido.
Também existe a forma hexadecimal: & representa o mesmo E comercial que &. A opção Numérica desta ferramenta gera decimal por padrão, mas o modo Desescapar também entende referências hexadecimais.
Além dos cinco caracteres reservados, o HTML também define entidades nomeadas para letras acentuadas e símbolos, como é e ñ. Isso é útil quando você não pode garantir UTF-8 no sistema de destino.
As pessoas também descrevem esses caracteres de formas diferentes: escape HTML de aspas, apóstrofo, E comercial, menor que ou maior que. As regras das entidades continuam as mesmas.
Caractere | Nome | Entidade nomeada | Entidade numérica | Observação |
|---|---|---|---|---|
| & | E comercial | & | & | Deve sempre ser escapado primeiro para evitar dupla codificação depois. |
| < | Sinal de menor que | < | < | Evita que o navegador o interprete como início de uma tag. |
| > | Sinal de maior que | > | > | Normalmente é escapado por simetria, embora nem sempre seja obrigatório. |
| " | Aspas duplas | " | " | Necessárias dentro de um valor de atributo HTML entre aspas duplas. |
| ' | Apóstrofo | ' | ' | ' é válido em HTML5, mas ' funciona em todos os lugares. |
| Espaço inquebrável | |   | É comum em conteúdo colado de editores com formatação. | |
| © | Símbolo de copyright | © | © | É um símbolo tipográfico, não um caractere reservado. |
| - | Travessão | — | — | Costuma ser alterado ao copiar e colar de processadores de texto. |
Onde o escape HTML não se aplica
O escape HTML só funciona onde o navegador está interpretando conteúdo textual HTML. Dois pontos comuns quebram essa suposição: elementos <script>/<style> e atributos HTML que na verdade contêm JavaScript ou CSS.
Dentro das tags <script> e <style>, o navegador não interpreta entidades de jeito nenhum, ele trata o conteúdo como JavaScript ou CSS bruto. Escapar & dentro de um bloco <script> não protege nada; apenas imprime um & literal no seu código, o que normalmente está errado. Valores dinâmicos precisam de escape adequado de strings JS ou CSS, não de entidades HTML.
O mesmo se aplica a atributos como onclick e style. <p onclick="NOT-HERE"> e <p style="NOT-HERE"> contêm JavaScript e CSS, respectivamente. O escape HTML sozinho não torna seguro conteúdo não confiável dentro deles. Ajuste o escape ao contexto real, e não apenas ao fato de "estar dentro de uma tag HTML".
Escapando HTML em código: JavaScript, Python e PHP
Muitos desenvolvedores não precisam apenas de uma conversão pontual: eles precisam da mesma lógica dentro do próprio app. Os exemplos abaixo cobrem três linguagens comuns para escapar e desescapar HTML.
Em JavaScript, não existe uma única função nativa para escapar HTML, por isso a abordagem com textContent continua sendo a mais segura no navegador. No servidor, prefira uma biblioteca específica de escape HTML.
Python e PHP são mais simples porque ambos já trazem funções dedicadas no conjunto padrão de ferramentas. Não é preciso instalar nada extra.
JavaScript (navegador)
// Escape (safe display)
const el = document.createElement("div");
el.textContent = "Tom & Jerry";
const escaped = el.innerHTML;
console.log(escaped); // Tom & Jerry
// Unescape
const parser = new DOMParser();
const decoded = parser.parseFromString(escaped, "text/html").body.textContent;
console.log(decoded); // Tom & JerryPython
import html
escaped = html.escape("Tom & Jerry")
print(escaped) # Tom & Jerry
decoded = html.unescape(escaped)
print(decoded) # Tom & JerryPHP
<?php
$escaped = htmlspecialchars("Tom & Jerry");
echo $escaped; // Tom & Jerry
$decoded = htmlspecialchars_decode($escaped);
echo $decoded; // Tom & JerryEscapar HTML evita XSS? (Segurança e privacidade)
Escapar HTML reduz o risco de XSS, mas não é proteção completa por si só. Escapar faz o texto do usuário ser renderizado como caracteres visíveis em vez de marcação, algo genuinamente útil e necessário. A proteção completa precisa de escape consciente do contexto: corpo HTML, atributos, JavaScript e contextos de URL têm, cada um, suas próprias regras.
Do lado da privacidade, esta ferramenta roda inteiramente no lado do cliente no seu navegador. Texto e HTML colados nunca são enviados para um servidor. Strings sensíveis, rascunhos de comentários, modelos internos e respostas de API que você está depurando, permanecem na sua máquina o tempo todo.
Trate esta ferramenta como uma forma de escapar ou decodificar corretamente entidades HTML para exibição, e não como um controle de segurança autônomo. Higienize qualquer HTML que você permita intencionalmente, texto rico ou saída Markdown, com uma biblioteca sanitizadora dedicada. Valide entradas não confiáveis também no lado do servidor, não apenas no momento da exibição. Para contexto de URL, nosso Codificador/Decodificador de URL lida com percent-encoding em query strings e caminhos.
Erros comuns de escape HTML e como corrigir
A maioria dos erros de escape e desescape HTML se resume a alguns padrões recorrentes. Reconhecê-los poupa tempo na revisão da entrada.
Se o texto ainda parecer duplamente escapado depois de uma passada de Desescapar, execute o processo mais uma vez. Isso normalmente significa que ele foi codificado duas vezes em algum ponto anterior.
Erro | Causa | Correção |
|---|---|---|
| O texto mostra `&lt;` em vez de `<` | A entrada foi escapada duas vezes: uma pelo seu código e outra pelo autoescape do template. | Desescape uma vez para remover uma camada e verifique se o texto ainda está codificado. |
| Aspas quebram um atributo HTML | " ou ' dentro do valor do atributo não foram escapados como `"` ou `'`. | Escape as aspas antes de inserir texto em qualquer atributo. |
| & aparece literal em vez de `&` | & não foi escapado primeiro e entrou em conflito com entidades geradas depois. | Sempre escape & antes de <, >, ", e '. |
| Desescapar não altera as entidades | A entrada mistura entidades nomeadas e numéricas, ou usa referências hexadecimais como `&`. | Use um decodificador que entenda entidades nomeadas, decimais e hexadecimais. |
Escape HTML vs. outras codificações
O escape HTML não é o único esquema para tornar texto seguro. A escolha correta depende do destino da saída. A tabela abaixo compara o escape HTML com as codificações com que ele é mais confundido.
Usar a codificação errada deixa o problema subjacente em aberto. Caracteres de escape HTML não vão proteger uma URL, e o percent-encoding também não vai proteger o texto do corpo HTML. Para query strings, nosso Codificador/Decodificador de URL lida corretamente com percent-encoding. Para dados binários como arquivos e imagens, nosso Codificador/Decodificador Base64 cobre codificação e decodificação Base64. Para literais de string dentro de JavaScript, uma ferramenta de escape de strings JavaScript aplica as sequências de escape corretas.
Codificação | Caracteres reservados | Melhor uso |
|---|---|---|
| Escape HTML | <, >, &, ", ' | Texto no corpo HTML e valores de atributos |
| Codificação de URL | Caracteres reservados de URL (sequências %XX) | Query strings, caminhos e dados de formulário |
| Escape de strings JavaScript | \n, \", \\, escapes unicode | Texto embutido em um literal de string JS |
| Codificação Base64 | Binário completo para um alfabeto de 64 caracteres | Dados binários em sistemas somente texto |
Perguntas frequentes
Perguntas Frequentes