Skip to main content
Validação HTML

Uma referência de caractere numérica expandiu para o intervalo de controles C1.

Sobre este problema HTML

O intervalo de controles C1 abrange os pontos de código Unicode U+0080 até U+009F (decimal 128–159). Estes são caracteres de controlo herdados de padrões de codificação mais antigos, e a especificação HTML proíbe explicitamente referências de caracteres numéricas que resolvem para eles. Quando o validador W3C encontra uma referência como — (decimal 151, que é U+0097), sinaliza-a porque estes pontos de código não são caracteres de conteúdo válidos.

Por que isto acontece

Este problema quase sempre resulta de uma confusão entre a codificação de caracteres Windows-1252 (ou CP-1252) e Unicode. Windows-1252 é uma codificação legada que reaproveira o intervalo de bytes 0x80–0x9F para armazenar caracteres úteis como aspas curvas, travessões longos e o símbolo do euro. No Unicode, no entanto, essas mesmas posições de pontos de código estão reservadas como caracteres de controlo C1 e não têm significado imprimível.

Quando texto originalmente codificado em Windows-1252 é convertido para referências numéricas HTML byte por byte — sem remapeamento adequado para Unicode — você acaba com referências como ” em vez do correto ” para uma aspa dupla direita. O valor do byte tinha significado em Windows-1252, mas o ponto de código Unicode correspondente é um caractere de controlo.

Por que é importante

  • Conformidade com padrões: A especificação HTML proíbe estas referências. Os navegadores podem tratá-las de forma inconsistente, com alguns remapeando-as silenciosamente e outros ignorando-as completamente.
  • Portabilidade: Embora alguns navegadores apliquem o remapeamento Windows-1252 como uma funcionalidade de compatibilidade, este comportamento não é garantido em todos os agentes de utilizador, plataformas ou contextos (como XML ou XHTML, onde estas referências causam erros de análise).
  • Acessibilidade: Leitores de ecrã e outras tecnologias assistivas podem não interpretar caracteres de controlo C1 de todo, resultando em conteúdo em falta ou corrompido para utilizadores que dependem deles.
  • Integridade dos dados: Se o seu HTML for processado por ferramentas, APIs ou analisadores que seguem rigorosamente a especificação, estas referências inválidas podem causar falhas ou perda de dados.

Como corrigir

  1. Use referências de caracteres nomeadas onde disponíveis — são a opção mais legível (por exemplo, —, ’, €).
  2. Use pontos de código Unicode corretos em referências numéricas se uma referência nomeada não estiver disponível (por exemplo, — ou para um travessão longo).
  3. Use o caractere literal UTF-8 diretamente no seu ficheiro fonte. Se o seu documento estiver guardado como UTF-8 (como deveria estar), você pode simplesmente digitar , ', ou diretamente.
  4. Audite conteúdo legado que possa ter sido migrado de sistemas ou bases de dados mais antigos usando codificação Windows-1252. Uma pesquisa por referências numéricas no intervalo decimal 128–159 encontrará todas as instâncias.

Exemplos

Inválido: Referências do intervalo de controlo C1

Estas referências resolvem para pontos de código de controlo C1, não os caracteres pretendidos:

<p>Price: &#128;50</p>
<p>She said, &#147;Hello.&#148;</p>
<p>2020&#150;2024</p>
<p>Wait &#151; what?</p>
<p>It&#146;s a beautiful day.</p>

Corrigido: Referências Unicode corretas

Substitua cada referência inválida pelo ponto de código Unicode adequado ou referência nomeada:

<p>Price: &euro;50</p>
<p>She said, &ldquo;Hello.&rdquo;</p>
<p>2020&ndash;2024</p>
<p>Wait &mdash; what?</p>
<p>It&rsquo;s a beautiful day.</p>

Corrigido: Usando pontos de código Unicode numéricos

Se você preferir referências numéricas, use os valores Unicode corretos:

<p>Price: €50</p>
<p>She said, &#8220;Hello.&#8221;</p>
<p>2020&#8211;2024</p>
<p>Wait &#8212; what?</p>
<p>It&#8217;s a beautiful day.</p>

Corrigido: Usando caracteres UTF-8 literais

A abordagem mais simples — use simplesmente os caracteres diretamente num documento codificado em UTF-8:

<p>Price: €50</p>
<p>She said, "Hello."</p>
<p>2020–2024</p>
<p>Wait — what?</p>
<p>It's a beautiful day.</p>

Encontre problemas como este automaticamente

O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.

Ajude-nos a melhorar os nossos guias

Este guia foi útil?

Pronto para validar os seus sites?
Comece o seu teste gratuito hoje.