Skip to main content
Validação HTML

Encontrado “<?”. Causa provável: Tentativa de usar uma instrução de processamento XML em HTML. (Instruções de processamento XML não são suportadas em HTML.)

Sobre este problema HTML

As instruções de processamento XML são uma funcionalidade do XML, não do HTML. Começam com <? e terminam com ?>, e são usadas em documentos XML para transportar instruções para aplicações que processam o documento. O exemplo mais comum é a declaração XML: <?xml version="1.0" encoding="UTF-8"?>. Embora estas sejam perfeitamente válidas em XML, o parser HTML não as reconhece. Quando o parser encontra <?, não sabe como lidar com isso e trata-o como um comentário inválido, o que leva a comportamento inesperado e a este erro de validação.

Isto é importante por várias razões. Primeiro, conformidade com padrões — o HTML5 tem um algoritmo de parsing claramente definido, e as instruções de processamento não fazem parte dele. Segundo, o comportamento do navegador torna-se imprevisível — diferentes navegadores podem lidar com o conteúdo <? inesperado de forma diferente, potencialmente expondo código em bruto ou quebrando o seu layout. Terceiro, se código do lado do servidor como PHP vazar para a saída, pode expor lógica sensível ou detalhes de configuração aos utilizadores finais.

Existem três causas comuns para este erro:

1. Incluir ficheiros SVG inline com a sua declaração XML. Quando copia o conteúdo de um ficheiro .svg e o cola diretamente no HTML, o ficheiro frequentemente começa com uma declaração XML e possivelmente uma instrução de processamento <?xml-stylesheet?>. Estas devem ser removidas — apenas o elemento <svg> e os seus filhos devem ser incluídos.

2. Código do lado do servidor não processado. Linguagens como PHP usam a sintaxe <?php ... ?> (ou a tag curta <? ... ?>). Se o servidor não estiver configurado para processar ficheiros PHP, ou se um ficheiro .html contém código PHP sem ser encaminhado através do interpretador PHP, as tags <?php em bruto acabam no HTML enviado para o navegador.

3. Copiar e colar conteúdo XML. Outros formatos baseados em XML (como feeds RSS, fragmentos XHTML, ou MathML com declarações XML) podem incluir instruções de processamento que não são válidas em HTML.

Como corrigir

  • Para SVGs inline: Abra o ficheiro SVG num editor de texto e copie apenas o elemento <svg>...</svg>. Remova a declaração <?xml ...?> e quaisquer outras instruções de processamento que precedam a tag <svg>.
  • Para PHP ou outro código do lado do servidor: Certifique-se de que o seu servidor está devidamente configurado para processar os ficheiros. Verifique que a extensão do ficheiro corresponde ao que o servidor espera (por exemplo, .php para ficheiros PHP). Verifique que a linguagem do lado do servidor está instalada e a funcionar.
  • Para outro conteúdo XML: Remova quaisquer instruções de processamento <?...?> antes de incorporar o conteúdo no HTML.

Exemplos

❌ SVG inline com declaração XML

<body>
  <?xml version="1.0" encoding="UTF-8"?>
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
    <circle cx="50" cy="50" r="40" fill="blue" />
  </svg>
</body>

A linha <?xml version="1.0" encoding="UTF-8"?> desencadeia o erro.

✅ SVG inline sem declaração XML

<body>
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
    <circle cx="50" cy="50" r="40" fill="blue" />
  </svg>
</body>

❌ Código PHP não processado na saída HTML

<body>
  <h1>Welcome</h1>
  <p><?php echo "Hello, World!"; ?></p>
</body>

Se o servidor não processar o PHP, o <?php ... ?> em bruto acaba no HTML e desencadeia este erro.

✅ Saída devidamente processada (ou equivalente HTML estático)

<body>
  <h1>Welcome</h1>
  <p>Hello, World!</p>
</body>

❌ SVG com uma instrução de processamento de folha de estilos XML

<body>
  <?xml-stylesheet type="text/css" href="style.css"?>
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50">
    <rect width="50" height="50" fill="red" />
  </svg>
</body>

✅ SVG sem a instrução de processamento

<body>
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50">
    <rect width="50" height="50" fill="red" />
  </svg>
</body>

Em HTML, use elementos <link> ou <style> padrão no <head> para folhas de estilos em vez de instruções de processamento XML.

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.