Skip to main content
Validação HTML

O texto não está na forma de normalização Unicode C.

Sobre este problema HTML

Unicode permite que alguns caracteres sejam representados de múltiplas formas. Por exemplo, a letra acentuada “é” pode ser armazenada como um único carácter precomposto (U+00E9) ou como dois pontos de código separados: a letra base “e” (U+0065) seguida de um acento agudo combinado (U+0301). Embora estes pareçam idênticos quando renderizados, são fundamentalmente diferentes ao nível dos bytes. A forma de normalização Unicode C (NFC) é a forma canónica que prefere a representação precomposta única sempre que uma existe.

A especificação HTML e o modelo de caracteres W3C para a World Wide Web requerem que todo o texto em documentos HTML esteja em NFC. Isto é importante por várias razões:

  • Correspondência de strings e pesquisa: Texto não-NFC pode causar falhas quando navegadores ou scripts tentam corresponder strings, comparar valores de atributos ou processar seletores CSS. Duas strings visualmente idênticas em formas de normalização diferentes não corresponderão com comparação simples de bytes.
  • Acessibilidade: Leitores de ecrã e tecnologias assistivas podem comportar-se de forma inconsistente ao encontrar sequências de caracteres decompostos.
  • Interoperabilidade: Diferentes navegadores, motores de pesquisa e ferramentas podem tratar texto não-NFC de forma diferente, levando a comportamentos imprevisíveis.
  • Identificadores de fragmento e IDs: Se um atributo id contém caracteres não-NFC, ligações de fragmento (#id) podem não funcionar corretamente.

Este problema aparece mais comummente quando o texto é copiado de processadores de texto, PDFs ou outras aplicações que usam formas Unicode decompostas (NFD), ou quando o conteúdo é gerado por software que não normaliza o seu output.

Como corrigir

  1. Identifique o texto afetado: O validador irá apontar para a linha específica que contém caracteres não-NFC. Os caracteres irão muitas vezes parecer normais visualmente, pelo que precisa de os inspecionar ao nível do ponto de código.
  2. Converta para NFC: Use um editor de texto ou ferramenta de linha de comandos que suporte normalização Unicode. Muitas linguagens de programação fornecem funções de normalização integradas.
  3. Previna problemas futuros: Configure o seu editor de texto ou pipeline de construção para guardar ficheiros em NFC. Ao aceitar input do utilizador, normalize-o do lado do servidor antes de armazenar ou incorporar em HTML.

Em Python, pode normalizar uma string:

import unicodedata
normalized = unicodedata.normalize('NFC', original_string)

Em JavaScript (Node.js ou navegador):

const normalized = originalString.normalize('NFC');

Na linha de comandos (usando uconv do ICU):

uconv -x NFC input.html > output.html

Exemplos

Incorreto (forma decomposta — NFD)

Neste exemplo, a letra “é” é representada como dois pontos de código (e + acento agudo combinado), o que desencadeia o aviso de validação. O código fonte pode parecer idêntico à versão correta, mas os bytes subjacentes diferem:

<!-- "é" aqui é armazenado como U+0065 U+0301 (decomposto) -->

<p>Résumé available upon request.</p>

Correto (forma precomposta — NFC)

Aqui, o mesmo texto usa o carácter precomposto único é (U+00E9):

<!-- "é" aqui é armazenado como U+00E9 (precomposto) -->

<p>Résumé available upon request.</p>

Incorreto em atributos

Texto não-NFC em valores de atributos também desencadeia este problema:

<!-- O id contém um carácter decomposto -->

<h2 id="resumé">Résumé</h2>

Correto em atributos

<!-- O id usa o carácter NFC precomposto -->

<h2 id="resumé">Résumé</h2>

Embora estes exemplos pareçam iguais no texto renderizado, a diferença está na forma como os caracteres são codificados. Para verificar que o seu texto está em NFC, pode colá-lo numa ferramenta de inspeção Unicode ou usar as funções de normalização mencionadas acima. Para leitura adicional, o W3C fornece um excelente guia sobre normalização em HTML e CSS.

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.