Sobre este problema HTML
Os URLs seguem regras de sintaxe rigorosas definidas pela RFC 3986, que não permite caracteres de espaço literais em nenhum lugar do URI — incluindo segmentos de caminho, strings de consulta e identificadores de fragmento. Quando o Validador HTML do W3C encontra um espaço no atributo src de um elemento <script>, marca-o como um carácter ilegal porque o valor do atributo não é um URL válido.
Embora a maioria dos navegadores modernos corrijam isto silenciosamente codificando o espaço antes de fazer o pedido, depender deste comportamento é problemático por várias razões:
-
Conformidade com as normas: A especificação HTML exige que o atributo
srccontenha um URL válido. Um URL com um espaço literal está tecnicamente malformado. - Fiabilidade entre navegadores: Nem todos os user agents, proxies ou CDNs lidam com URLs malformados da mesma forma. O que funciona num navegador pode falhar noutro contexto.
- Interoperabilidade: Outras ferramentas que consomem o seu HTML — como linters, crawlers, leitores de ecrã e pipelines de build — podem não ser tão tolerantes como os navegadores.
- Problemas de cópia-colagem e ligação: Espaços literais em URLs causam problemas quando os utilizadores copiam ligações ou quando os URLs aparecem em contextos de texto simples como emails, onde o espaço pode quebrar o URL em dois.
Como corrigir
Tem três opções, listadas da mais recomendada para a menos:
- Renomear o ficheiro ou diretório para eliminar espaços completamente (por exemplo, usar hífenes ou underscores). Esta é a solução mais limpa.
-
Codificar o espaço em percentagem como
%20no valor do atributosrc. - Usar uma ferramenta de build ou bundler que gera referências com caminhos devidamente codificados ou sem espaços automaticamente.
Evite usar + como substituto de espaço em segmentos de caminho. O carácter + representa um espaço apenas em strings de consulta application/x-www-form-urlencoded, não em segmentos de caminho de URL.
Exemplos
❌ Inválido: espaço no segmento do caminho
<script src="https://example.com/media assets/app.js"></script>
O espaço entre media e assets torna este um URL inválido.
✅ Corrigido: codificar o espaço em percentagem
<script src="https://example.com/media%20assets/app.js"></script>
Substituir o espaço por %20 produz um URL válido e em conformidade com as normas.
✅ Melhor: renomear para evitar espaços completamente
<script src="https://example.com/media-assets/app.js"></script>
Usar um hífen (ou underscore) em vez de um espaço é a abordagem preferida. Mantém os URLs limpos, legíveis e livres de problemas de codificação.
❌ Inválido: espaço num caminho relativo local
Este problema não se limita a URLs absolutos. Caminhos relativos desencadeiam o mesmo erro:
<script src="js/my script.js"></script>
✅ Corrigido: codificar ou renomear o ficheiro local
<script src="js/my%20script.js"></script>
Ou, melhor ainda:
<script src="js/my-script.js"></script>
Múltiplos espaços e outros caracteres especiais
Se um URL contém múltiplos espaços ou outros caracteres especiais, cada um deve ser codificado individualmente. Por exemplo, { torna-se %7B e } torna-se %7D. Uma referência rápida para caracteres comuns:
| Carácter | Forma codificada |
|---|---|
| Espaço |
%20 |
[ |
%5B |
] |
%5D |
{ |
%7B |
} |
%7D |
<!-- Inválido -->
<script src="libs/my library [v2].js"></script>
<!-- Válido -->
<script src="libs/my%20library%20%5Bv2%5D.js"></script>
<!-- Melhor: renomear o ficheiro -->
<script src="libs/my-library-v2.js"></script>
Note que esta mesma regra se aplica ao atributo src noutros elementos como <img>, <iframe>, <audio> e <video>, bem como ao atributo href em <a> e <link>. Sempre que referenciar um URL em HTML, certifique-se de que não contém espaços literais.
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.
Saiba mais: