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.
Saiba mais: