Skip to main content

Sobre este problema HTML

A especificação HTML proíbe explicitamente que determinados pontos de código Unicode apareçam em qualquer lugar de um documento HTML. Estes incluem a maioria dos caracteres de controlo ASCII (como U+0000 NULL, U+0008 BACKSPACE, ou U+000B VERTICAL TAB), bem como não-caracteres Unicode como U+FFFE, U+FFFF, e o intervalo U+FDD0 a U+FDEF. Quando o validador W3C encontra um destes pontos de código, reporta o erro “Forbidden code point” seguido do valor específico.

Estes caracteres são proibidos porque não têm significado definido em HTML e podem causar comportamento imprevisível entre navegadores e plataformas. Alguns podem ser silenciosamente removidos, outros podem produzir falhas de renderização, e alguns podem interferir com a análise. Leitores de ecrã e outras tecnologias assistivas também podem comportar-se de forma errática ao encontrar estes caracteres, tornando isto também uma preocupação de acessibilidade.

Como os caracteres proibidos entram no seu código

  • Cópia e colagem de fontes externas como processadores de texto, PDFs, ou bases de dados que incorporam caracteres de controlo invisíveis.
  • Editores de texto ou ferramentas de build defeituosos que introduzem bytes perdidos durante o processamento de ficheiros.
  • Codificação de caracteres incorreta onde sequências de bytes são mal interpretadas, resultando em pontos de código proibidos.
  • Geração de conteúdo programática onde strings não são adequadamente sanitizadas antes de serem inseridas em HTML.

Como corrigir

  1. Identifique o caráter e a sua localização. A mensagem do validador inclui o ponto de código (ex: U+000B) e o número da linha. Use um editor de texto que possa mostrar caracteres invisíveis (como o VS Code com a configuração “Render Whitespace” ou “Render Control Characters” ativada, ou um editor hexadecimal).
  2. Remova ou substitua o caráter. Na maioria dos casos, o caráter proibido não serve nenhum propósito e pode simplesmente ser eliminado. Se estava a substituir um espaço ou quebra de linha, substitua-o pelo caráter padrão apropriado.
  3. Sanitize o conteúdo na origem. Se o seu HTML for gerado dinamicamente, remova pontos de código proibidos das strings antes de as enviar. Em JavaScript, pode usar uma expressão regular para os remover.
// Remove common forbidden code points
text = text.replace(/[\x00-\x08\x0B\x0E-\x1F\x7F\uFDD0-\uFDEF\uFFFE\uFFFF]/g, '');

Exemplos

Incorreto — contém um caráter de controlo proibido

Neste exemplo, um caráter de tabulação vertical (U+000B) está incorporado entre “Hello” e “World.” É invisível na maioria dos editores mas o validador irá sinalizá-lo.

<!-- The ␋ below represents U+000B VERTICAL TAB, an invisible forbidden character -->

<p>Hello␋World</p>

Correto — caráter proibido removido

<p>Hello World</p>

Incorreto — caráter NULL num valor de atributo

Um caráter U+0000 NULL pode aparecer dentro de um atributo, frequentemente de saída programática.

<!-- The attribute value contains a U+0000 NULL byte -->

<div title="Some�Text">Content</div>

Correto — caráter NULL removido do atributo

<div title="SomeText">Content</div>

Caracteres de controlo permitidos

Nem todos os caracteres de controlo são proibidos. Os seguintes são explicitamente permitidos em HTML:

  • U+0009 — Tabulação horizontal (caráter de tabulação normal)
  • U+000A — Avanço de linha (newline)
  • U+000D — Retorno de carro
<pre>Line one
Line two    with a tab</pre>

Isto é válido porque usa apenas caracteres de espaçamento padrão (U+000A para a nova linha e U+0009 para a tabulação).

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.