Codificador / Decodificador de Entidades HTML

Converta caracteres especiais em entidades HTML (&, <, ©) ou decodifique entidades de volta em texto legível — nas duas direções, ao vivo.

962 visualizações

Como Funciona

O HTML reserva um punhado de caracteres para sua própria sintaxe: < e > marcam tags, e & inicia uma referência de entidade. Se esses caracteres aparecerem literalmente dentro de um conteúdo inserido em uma página — um comentário, um nome de usuário, uma busca ecoada de volta na tela — o navegador tenta interpretá-los como marcação em vez de exibi-los como texto. A codificação os converte para sua forma de entidade (&lt;, &gt;, &amp;) para que sejam exibidos como caracteres literais em vez de interpretados. A decodificação faz o inverso, transformando entidades como &amp; ou &#8217; de volta nos caracteres reais que representam.

Isso não é um detalhe cosmético — é um controle de segurança. Se uma caixa de comentário recebe entrada do usuário e a insere no HTML da página sem codificá-la antes, um visitante pode digitar <script>...</script> e fazer com que esse script realmente seja executado no navegador de todos os outros visitantes: essa classe de vulnerabilidade se chama Cross-Site Scripting (XSS), e codificar saídas não confiáveis antes que toquem o HTML é a defesa padrão contra isso. Por exemplo, codificar o texto 5 < 10 & 10 > 5 produz 5 &lt; 10 &amp; 10 &gt; 5, que é exibido corretamente e não pode ser confundido com marcação.

O Que Você Deve Saber

  • Entidades nomeadas e numéricas representam o mesmo caractere de formas diferentes. &apos; (nomeada) e &#39; (numérica) significam ambas uma aspas simples, mas as entidades nomeadas dependem do analisador reconhecer aquele nome específico — as numéricas (decimais ou hexadecimais &#x) são suportadas universalmente e mais seguras para saída gerada por máquina.
  • A codificação não é a única defesa. Ela protege conteúdo de texto; atributos, URLs e contextos de JavaScript embutido precisam de suas próprias regras de escape, já que um valor dentro de href="javascript:..." ou dentro de um bloco <script> é interpretado sob regras diferentes das do texto comum.
  • A conversão é local. Esta ferramenta usa o próprio analisador DOM do seu navegador — nada é enviado ou registrado.
  • Nem toda linguagem de templates do lado do servidor faz auto-escape por padrão. Algumas (como saída antiga de PHP ou concatenação de strings crua) exigem que você chame explicitamente uma função de escape — esquecer isso é uma das fontes mais comuns de bugs reais de XSS.
  • Algumas entidades parecem quase idênticas visualmente. Uma aspas simples reta (') e uma aspas simples tipográfica (&#8217;) são exibidas quase da mesma forma na tela, mas são sequências de bytes diferentes — uma distinção que importa em amostras de código ou URLs.

Um exemplo concreto de antes/depois: um campo de comentário contendo Ótimo post! 5 < 10, certo? não precisa de nenhum tratamento especial como texto simples, mas no momento em que é inserido em um modelo HTML sem escape, um visitante malicioso poderia em vez disso enviar <img src=x onerror=alert(1)> — a codificação transforma isso em texto inerte e visível em vez de um manipulador de erro de imagem em execução.

Perguntas Frequentes

Por que codificar o texto antes de colocá-lo em HTML?

Um < ou & não escapado em conteúdo HTML pode ser interpretado como marcação, quebrando o layout da página ou — muito pior — permitindo que tags <script> ou <img onerror> injetadas realmente sejam executadas (Cross-Site Scripting). Codificar para &lt; e &amp; mantém o texto literal e inerte, não importa o que um usuário tenha digitado.

Ele lida com entidades nomeadas e numéricas?

Sim — a decodificação entende tanto entidades nomeadas (&amp;copy;) quanto numéricas, sejam decimais (&amp;#169;) ou hexadecimais (&amp;#x00A9;). As três representam o mesmo caractere ©; a ferramenta normaliza qualquer uma delas de volta ao glifo real.

Por que usar uma entidade numérica em vez de uma nomeada, ou vice-versa?

Entidades nomeadas (&amp;apos;, &amp;hellip;) são mais legíveis no código-fonte, mas dependem do analisador reconhecer aquele nome exato — algumas menos comuns têm suporte inconsistente em ferramentas mais antigas. Entidades numéricas (&amp;#39;, &amp;#8230;) são universalmente compreendidas por qualquer analisador HTML, independentemente da idade ou do fornecedor, motivo pelo qual ferramentas automatizadas e bibliotecas de sanitização costumam preferi-las.

Codificar sozinho torna minha página segura contra XSS?

Isso trata os nós de texto, mas o HTML tem outros contextos de injeção — dentro do valor de um atributo, dentro de uma URL, dentro de um bloco <script> ou <style> — cada um exigindo sua própria abordagem de escape, já que o analisador do navegador muda de regras dependendo de onde está no documento. Codificar conteúdo de texto com entidades é uma camada essencial, não toda a defesa; uma etapa mais ampla de "sanitização", que remove ou reescreve tags inteiras, é uma ferramenta separada e mais específica para quando você quer intencionalmente permitir algum HTML limitado.

Meu texto é enviado para algum lugar?

Não — a conversão acontece instantaneamente no seu navegador usando o próprio analisador do DOM; nada é enviado, registrado ou armazenado, o que torna seguro testar até mesmo conteúdo real enviado por usuários, incluindo qualquer coisa que você suspeite conter uma tentativa de injeção.

Comentários

Ainda não há comentários — seja o primeiro a escrever um!

Ferramentas Semelhantes