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 ç (ç) e do ã/õ (ã, õ) — 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 — « e » (« ») — sobretudo em textos formais, enquanto o Brasil adotou quase universalmente as aspas curvas duplas “/” (" "), 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
<→<— para não iniciar uma tag.>→>— para fechar corretamente o texto após uma tag.&→&— para que o & não seja lido como início de outra entidade."e'→",'— 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.