Sobre este problema HTML
O atributo charset foi historicamente usado para declarar a codificação de caracteres de um ficheiro de script externo quando diferia da codificação do documento. Em HTML moderno, este atributo está obsoleto porque a especificação HTML agora exige que a codificação de caracteres de um script externo deve coincidir com a codificação do próprio documento. Uma vez que a codificação do documento já está declarada através de <meta charset="UTF-8"> (ou através de cabeçalhos HTTP), especificá-la novamente em elementos <script> individuais é redundante e já não é válido.
Se os seus ficheiros de script externos usam uma codificação diferente do seu documento HTML, a solução correta é converter esses ficheiros de script para coincidir com a codificação do documento (tipicamente UTF-8) em vez de usar o atributo charset. UTF-8 é a codificação recomendada para todo o conteúdo web e é suportada universalmente em todos os browsers.
Isto é importante para a conformidade com as normas — o padrão HTML living standard marca explicitamente este atributo como obsoleto. Também afeta a manutenibilidade, uma vez que ter declarações de codificação espalhadas por tags de script pode criar confusão sobre qual codificação está realmente em vigor. Os browsers também podem ignorar completamente o atributo, levando a comportamentos inesperados se estiver a depender dele.
Como corrigir
-
Remova o atributo
charsetde todos os elementos<script>. -
Certifique-se de que o seu documento declara a sua codificação usando
<meta charset="UTF-8">dentro do<head>. - Converta quaisquer ficheiros de script que ainda não estejam em UTF-8 para usar codificação UTF-8. A maioria dos editores de código modernos podem fazer isto através de “Guardar com Codificação” ou uma opção similar.
-
Já que está a fazer isso, também pode remover
type="text/javascript"— este é o tipo padrão para scripts e já não é necessário.
Exemplos
Incorreto: usar o atributo charset obsoleto
<script src="app.js" type="text/javascript" charset="UTF-8"></script>
Isto gera o aviso de validação porque charset está obsoleto. O type="text/javascript" também é desnecessário uma vez que é o padrão.
Incorreto: charset num script inline
<script charset="UTF-8">
console.log("Hello");
</script>
O atributo charset apenas tinha significado para scripts externos, e mesmo nesse contexto está agora obsoleto.
Correto: elemento script limpo
<script src="app.js"></script>
Correto: garantir que a codificação está declarada ao nível do documento
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>My Page</title>
<script src="app.js"></script>
</head>
<body>
<p>Content here.</p>
</body>
</html>
A declaração <meta charset="UTF-8"> no <head> cobre a codificação para todo o documento, incluindo todos os scripts ligados. Não são necessários atributos charset adicionais em elementos individuais.
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.