Pular para o conteúdo principal

Codificar e decodificar HTML

Esta ferramenta codifica texto em referências de caracteres HTML e os decodifica de volta, inteiramente no seu navegador. Entidades nomeadas como & e < cobrem as escapas comuns; formas numéricas como A e A alcançam qualquer caractere Unicode. O modo de decodificação estrito reporta entidades desconhecidas em vez de passá-las adiante.

Só local

Codificar e decodificar HTML: explicação

HTML atribui a dois caracteres funções estruturais: & inicia uma referência de caractere, < inicia uma tag. Quando esses caracteres aparecem como texto, precisam de escapar, e o mecanismo é a referência de caractere: uma grafia curta e não ambígua como &amp; que todo analisador decodifica de volta para o caractere original.

A lista padrão de referências nomeadas é finita e fechada — mais de 2.200 grafias — e cinco carregam quase todo o trabalho: &amp; &lt; &gt; &quot; e &apos;. Para qualquer coisa não coberta pela lista, uma referência numérica escreve o ponto de código diretamente: &#65; e &#x41; são ambos a letra A, e o mesmo truque alcança todos os caracteres que o Unicode tem.

O painel abaixo faz ambas as direções: um alternador codifica texto em entidades, o outro decodifica-as de volta. Chaves selecionam saída nomeada ou numérica, e decodificação estrita ou tolerante. Como tudo neste site, é executado inteiramente nesta aba.

Construir links que carregam dados do usuário é onde as duas gramáticas de escapamento se encontram, e o codificador e decodificador de URL lida com a metade de codificação percentual.

Escapamento de entidades é um membro de uma família de codificações de caractere e byte; o site hub de ferramentas de codificação reúne o resto, do Base64 ao binário.

As cinco entidades nomeadas que fazem quase todo o trabalho

Quais caracteres devem ser escapados depende do contexto. Em texto, dois são obrigatórios: um & literal deve ser escrito &amp;, porque um e comercial seguido de letras e ponto-e-vírgula é como as referências começam, e um < literal deve ser escrito &lt;, porque caso contrário abre uma tag. Os outros três são contextuais; escapar todos os cinco incondicionalmente não tem custo.

EntidadeEscreveObrigatório quando
&amp;&Sempre em texto — a fuga que a especificação exige
&lt;<Em texto, antes de abrir uma tag
&gt;>Raramente obrigatório em texto; escapado por hábito
&quot;"Dentro de valores de atributo entre aspas duplas
&apos;'Dentro de valores de atributo entre aspas simples

Nomeado versus numérico: duas grafias de um caractere

Uma referência numérica escreve o próprio ponto de código: &#65; é decimal para A, &#x41; hexadecimal para a mesma letra — ponto-e-vírgula obrigatório em HTML5, x e dígitos hexadecimais insensíveis a maiúsculas e minúsculas. Como o número nomeia o ponto de código diretamente, a forma numérica cobre todos os caracteres que o Unicode define, incluindo emoji.

A troca é legibilidade de fonte: &eacute; diz a um humano o que será renderizado, &#233; não. O modo nomeado aqui segue a política usual: caracteres comuns recebem nomes (&nbsp;, &mdash;, é como &eacute;), o longo rabisco recebe números. A jusante a diferença desaparece — ambas as grafias decodificam para o mesmo caractere.

Modo de decodificação e o que o modo estrito reporta

O alternador de direção inverte o pipeline: cole marcação escapada, obtenha caracteres simples. As três grafias decodificam — nomeada, decimal e hexadecimal — e a pesquisa nomeada tolera maiúsculas e minúsculas, porque a marcação do mundo real não é consistente.

Entidades desconhecidas recebem tratamento honesto. O conversor não reconhece &npsp; — o erro clássico de &nbsp; — e por padrão deixa intacto, porque texto pode legitimamente conter e comerciais. O modo estrito existe para marcação que se diz totalmente escapada: ali uma entidade desconhecida é um bug, e a decodificação estrita reporta cada uma acima da saída em vez de deixar um erro sobreviver.

Escapar é o limite de segurança, não decoração

O motivo dessa conversação importa além da tipografia é injeção. Texto fornecido pelo usuário que chega a uma página sem escapar não é exibido como texto: um <script> literal dentro dele executa, e uma aspa não escapada em um valor de atributo quebra o atributo. Escapar transforma esses bytes em caracteres inertes — &lt;script&gt; é renderizado como texto legível e não faz mais nada.

É um trabalho diferente do escapamento de URL: codificação percentual tem seu próprio conjunto reservado e gramática, e os dois não são intercambiáveis — por isso recebem ferramentas separadas.

Perguntas frequentes

O codificador envia meu texto para um servidor?

Não. Ambas as direções são transformações de string executadas por JavaScript que carregou com a página; nada é transmitido. A Content-Security-Policy do site define connect-src 'self', então o navegador próprio recusaria uma solicitação de saída. Verifique de qualquer forma: o painel Rede do DevTools fica silencioso, e a ferramenta continua funcionando offline.

Quais caracteres precisam realmente ser escapados em HTML?

No conteúdo de texto, dois são obrigatórios: & como &amp; e < como &lt;. Um > nu em texto é tolerado mas escapado por hábito, e as aspas importam apenas dentro de valores de atributo delimitados pela mesma aspa. Esta ferramenta escapa todos os cinco incondicionalmente, então sua saída é segura em qualquer lugar.

Qual a diferença entre entidades nomeadas e numéricas?

Uma entidade nomeada é um rótulo da lista fechada do padrão — &amp;, &copy;, &eacute;. Uma referência numérica escreve o ponto de código diretamente, decimal como &#65; ou hexadecimal como &#x41;. Ambos decodificam para o caractere idêntico; numérico cobre todo ponto de código Unicode, nomeado é mais legível. A diferença é apenas para leitores de fonte.

O que o modo de decodificação estrito detecta?

Nomes desconhecidos e números impossíveis. Decodificação estrita reporta entidades como &npsp; — o erro clássico de &nbsp; — e referências numéricas cujo valor não é um código de caractere válido. O modo tolerante deixa entidades desconhecidas intactas.

Entidades afetam SEO ou leitores de tela?

Não. Entidades são decodificadas durante a análise HTML, antes do índice de busca ou um leitor de tela as verem. O DOM contém o caractere literal de qualquer forma, então &eacute; e &#233; ranqueiam identicamente e são anunciados identicamente. Escolha uma grafia para os humanos lendo a fonte, não para máquinas consumindo a página.

Por que minha aspa simples se torna &apos;?

Porque HTML5 define &apos; — foi apenas XML por anos, por isso referências mais antigas o chamam de arriscado — e uma aspa simples dentro de um atributo entre aspas simples é exatamente onde escapá-la é obrigatório. Para consumidores pré-HTML5, a forma numérica &#39; é a que todo analisador sempre aceitou.