Skip to main content
Validação HTML

Elemento “script” não deve ter atributo “charset” a menos que o atributo “src” também seja especificado.

Sobre este problema HTML

O atributo charset no elemento <script> diz ao navegador que codificação de caracteres usar ao interpretar o ficheiro de script externo referenciado. Quando um script é escrito diretamente dentro do documento HTML (um script inline), a codificação de caracteres do script é inerentemente a mesma da codificação do documento — não há ficheiro separado para descodificar. Por causa disso, a especificação HTML requer que charset só apareça em elementos <script> que também tenham um atributo src apontando para um ficheiro externo.

Incluir charset sem src viola a especificação HTML e sinaliza uma má compreensão de como a codificação de caracteres funciona para scripts inline. Os validadores sinalizam isto porque os navegadores ignoram o atributo charset em scripts inline, o que significa que não tem efeito e pode enganar os programadores fazendo-os pensar que definiram a codificação quando não o fizeram.

Também vale a pena notar que o atributo charset no <script> está depreciado na norma HTML living standard, mesmo para scripts externos. A melhor prática moderna é servir ficheiros de script externos com o cabeçalho HTTP Content-Type correto (por exemplo, Content-Type: application/javascript; charset=utf-8) ou simplesmente garantir que todos os seus ficheiros usam codificação UTF-8, que é o padrão. Se está a trabalhar com uma base de código mais antiga que ainda usa charset, considere removê-lo completamente e confiar no UTF-8 em todo o lado.

Exemplos

Incorreto: charset num script inline

Isto despoleta o erro de validação porque charset é especificado sem um atributo src correspondente.

<script charset="utf-8">
  console.log("Hello, world!");
</script>

Correto: Remover charset de scripts inline

Uma vez que scripts inline usam a codificação do documento, simplesmente remova o atributo charset.

<script>
  console.log("Hello, world!");
</script>

Correto: Usar charset com um script externo (depreciado mas válido)

Se precisa de especificar a codificação de um script externo, tanto charset como src devem estar presentes. Note que este uso, embora válido, está depreciado.

<script src="app.js" charset="utf-8"></script>

Recomendado: Script externo sem charset

A abordagem moderna preferida é omitir charset completamente e garantir que o servidor entrega o ficheiro com o cabeçalho de codificação correto, ou simplesmente usar UTF-8 para tudo.

<script src="app.js"></script>

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.