Todos os artigos

HTML Entities: como exibir caracteres especiais com segurança

Em HTML, os caracteres <, > e & têm significado especial e precisam ser escapados, mas o português traz um conjunto próprio de casos: cedilha, til e uma diferença de convenção tipográfica entre Portugal e o Brasil que passa despercebida na maioria dos tutoriais.

Cedilha e til: além do básico do ASCII

Palavras como "coração" ou "não" dependem do &ccedil; (ç) e do &atilde;/&otilde; (ã, õ) — combinações que não existem em inglês e por isso ficam de fora de qualquer checklist genérico de escaping. Com UTF-8 já não é preciso converter esses caracteres para exibi-los, mas eles ainda aparecem como entidades em exportações CSV antigas, e-mails transacionais gerados por sistemas legados e feeds RSS que herdaram configurações de charset de décadas atrás.

Aspas: uma diferença sutil entre PT-PT e PT-BR

Em Portugal, a tipografia tradicional de livros e jornais ainda usa aspas angulares — &laquo; e &raquo; (« ») — sobretudo em textos formais, enquanto o Brasil adotou quase universalmente as aspas curvas duplas &ldquo;/&rdquo; (" "), mais próximas do padrão inglês. Um site que atende os dois mercados com o mesmo template de citação frequentemente usa a convenção errada para metade do público sem perceber.

O conjunto mínimo de caracteres a escapar

  • <&lt; — para não iniciar uma tag.
  • >&gt; — para fechar corretamente o texto após uma tag.
  • &&amp; — para que o & não seja lido como início de outra entidade.
  • " e '&quot;, &#39; — obrigatório dentro de atributos entre aspas.

A relação com o XSS

A maioria das vulnerabilidades XSS surge justamente porque texto inserido pelo usuário é colocado em HTML sem escaping. Exibir "<script>...</script>" sem convertê-lo em entidades faz o navegador executá-lo como código. O escaping é uma proteção básica — mas não a única — ao exibir conteúdo dinâmico.

Quando isso é necessário

Codificar entidades é útil ao preparar texto manualmente para inserção em HTML ou depurar templates; decodificar serve para ler o texto "cru" escondido atrás das entidades numa marcação ou feed de dados já pronto.

O contexto importa: texto vs. atributo

Escapar <, > e & é suficiente para texto entre tags, mas dentro de um atributo entre aspas é preciso também escapar especificamente o tipo de aspas usado — duplas ou simples. Se o atributo é delimitado por aspas duplas e o valor contém uma aspa dupla não escapada, a marcação "quebra" antes do esperado.

Experimentar a ferramenta