Sobre este problema HTML
O que são caracteres de controlo?
Os caracteres de controlo ocupam os pontos de código U+0000 a U+001F e U+007F a U+009F em Unicode. Foram originalmente concebidos para controlar dispositivos de hardware (por exemplo, U+0002 é “Start of Text”, U+0007 é “Bell”, U+001B é “Escape”). Estes caracteres não têm representação visual e não carregam qualquer significado semântico num documento web.
A especificação HTML proíbe explicitamente referências de caracteres que resolvem para a maioria dos caracteres de controlo. Embora a sintaxe  seja uma referência de caractere estruturalmente válida, o caractere para o qual aponta não é um caractere de conteúdo permitido. O validador W3C levanta este erro para sinalizar referências como �, , ,  e outras que se enquadram nos intervalos de caracteres de controlo.
Porque é que isto é um problema
- Conformidade com as normas: O WHATWG HTML Living Standard define um conjunto específico de pontos de código “noncharacter” e “control character” que não devem ser referenciados. Usá-los produz um erro de análise.
- Renderização imprevisível: Os navegadores lidam com caracteres de controlo ilegais de forma inconsistente. Alguns podem descartá-los silenciosamente, outros podem renderizar um caractere de substituição (�), e outros podem exibir comportamento inesperado.
- Acessibilidade: Leitores de ecrã e outras tecnologias de apoio podem engasgar-se ou interpretar mal os caracteres de controlo, degradando a experiência para utilizadores que dependem destas ferramentas.
- Integridade dos dados: Caracteres de controlo na sua marcação frequentemente indicam um erro de copiar-colar, uma fonte de dados corrompida, ou um erro de template que insere dados binários brutos na saída HTML.
Como corrigir
-
Identifique a referência problemática — procure por referências de caracteres como
,,�,, ou similares que apontem para pontos de código de caracteres de controlo. - Determine a intenção — descubra que caractere ou conteúdo era realmente pretendido. Frequentemente, uma referência de caractere de controlo é o resultado de um erro num pipeline de dados ou motor de templates.
- Remova ou substitua — elimine completamente a referência ou substitua-a pelo caractere imprimível ou entidade HTML corretos.
Exemplos
Incorreto: referência de caractere de controlo
Esta marcação contém , que expande para o caractere de controlo U+0002 (Start of Text) e desencadeia o erro de validação:
<p>Algum texto  mais texto</p>
Incorreto: forma hexadecimal de um caractere de controlo
O mesmo problema ocorre com a sintaxe hexadecimal:
<p>Dados: </p>
Correto: remover a referência de caractere de controlo
Se o caractere de controlo foi não intencional, simplesmente remova-o:
<p>Algum texto mais texto</p>
Correto: usar uma referência de caractere válida
Se pretendia exibir um caractere especial, use o ponto de código imprimível correto ou entidade nomeada. Por exemplo, para exibir uma lista de marcadores (•), símbolo de copyright (©), ou ampersand (&):
<p>Item • Detalhes</p>
<p>Copyright © 2024</p>
<p>Tom & Jerry</p>
Correto: documento completo sem caracteres de controlo
<!DOCTYPE html>
<html lang="en">
<head>
<title>Página de Exemplo</title>
</head>
<body>
<p>Este parágrafo usa apenas referências de caracteres válidas: & < > ©</p>
</body>
</html>
Pontos de código de caracteres de controlo comuns a evitar
| Referência | Ponto de código | Nome |
|---|---|---|
� |
U+0000 | Null |
 |
U+0001 | Start of Heading |
 |
U+0002 | Start of Text |
 |
U+0007 | Bell |
 |
U+0008 | Backspace |
 |
U+000B | Vertical Tab |
 |
U+000C | Form Feed |
 |
U+007F | Delete |
Se o seu conteúdo é gerado dinamicamente (de uma base de dados, API, ou entrada do utilizador), sanitize os dados antes de os inserir no HTML para remover caracteres de controlo. A maioria das linguagens do lado do servidor e motores de templates fornecem utilitários para este propósito.
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.