Skip to main content
Validação HTML

Valor incorreto X para o atributo “href” no elemento “a”: carácter ilegal nos dados do esquema: espaço não é permitido.

Sobre este problema HTML

O padrão URL (definido pelo WHATWG) especifica um conjunto rigoroso de caracteres permitidos em cada parte de uma URL. Um carácter de espaço não está entre eles. Quando o validador encontra um espaço literal num valor href, reporta o erro “Carácter ilegal nos dados do esquema: espaço não é permitido.” Isto aplica-se a espaços em qualquer lugar da URL — no caminho, string de consulta, fragmento, ou mesmo após o esquema (por exemplo, https:).

Embora a maioria dos navegadores modernos seja tolerante e tente corrigir URLs malformadas codificando espaços automaticamente, depender deste comportamento é problemático por várias razões:

  • Conformidade com padrões: URLs inválidas violam a especificação HTML, e markup que depende da correção de erros do navegador é frágil e imprevisível.
  • Acessibilidade: Tecnologias assistivas, como leitores de ecrã, podem não lidar com URLs malformadas da mesma forma que os navegadores fazem. Isto pode resultar em links quebrados para utilizadores que dependem destas ferramentas.
  • Interoperabilidade: Consumidores não-navegador do seu HTML — crawlers de motores de pesquisa, verificadores de links, clientes de email, leitores RSS, e APIs — podem não realizar a mesma correção automática, levando a links quebrados ou conteúdo perdido.
  • Copiar-colar e partilha: Quando os utilizadores copiam uma URL malformada da origem, o espaço pode causar a quebra do link quando colado noutras aplicações.

Como corrigir

A correção depende de onde o espaço aparece:

  1. No caminho ou fragmento: Substitua cada espaço por %20. Por exemplo, /meu ficheiro.html torna-se /meu%20ficheiro.html.
  2. Na string de consulta: Pode usar %20 ou, se o valor faz parte de dados application/x-www-form-urlencoded, + também é aceitável para espaços dentro de valores de parâmetros de consulta. No entanto, %20 é universalmente seguro.
  3. Programaticamente: Use encodeURI() em JavaScript para codificar uma URL completa (preserva caracteres estruturais como /, ?, e #). Use encodeURIComponent() para codificar valores individuais de parâmetros de consulta. Do lado do servidor, use a função equivalente de codificação de URL da sua linguagem.

Se está a escrever URLs manualmente em HTML, simplesmente encontre cada espaço e substitua-o por %20. Se as URLs são geradas dinamicamente (de uma base de dados, CMS, ou entrada do utilizador), certifique-se de que o seu código de template ou do lado do servidor as codifica antes de inserir no markup.

Exemplos

Inválido — espaço no caminho

<a href="https://example.com/docs/My Report.pdf">Download Report</a>

O espaço literal entre “My” e “Report” desencadeia o erro do validador.

Corrigido — espaço codificado como %20

<a href="https://example.com/docs/My%20Report.pdf">Download Report</a>

Inválido — espaço num parâmetro de consulta

<a href="https://example.com/search?q=hello world">Search</a>

Corrigido — espaço codificado na string de consulta

<a href="https://example.com/search?q=hello%20world">Search</a>

Inválido — múltiplos espaços em diferentes partes da URL

<a href="https://example.com/my folder/page two.html?ref=some value#my section">Link</a>

Corrigido — todos os espaços codificados

<a href="https://example.com/my%20folder/page%20two.html?ref=some%20value#my%20section">Link</a>

Codificar URLs com JavaScript

Se está a construir URLs dinamicamente, use as funções de codificação incorporadas em vez de fazer substituição manual de strings:

<script>
  // encodeURI codifica uma URL completa mas preserva :, /, ?, #, etc.
  const url = encodeURI("https://example.com/docs/My Report.pdf");
  // Resultado: "https://example.com/docs/My%20Report.pdf"

  // encodeURIComponent codifica um único valor (para parâmetros de consulta)
  const query = encodeURIComponent("hello world");
  // Resultado: "hello%20world"
</script>

Note que encodeURI() é apropriada para codificar uma URL completa, enquanto encodeURIComponent() deve ser usada para componentes individuais como valores de parâmetros de consulta — codifica caracteres como / e ? que têm significado estrutural numa URL.

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.