Skip to main content
Validação HTML

O atributo “charset” no elemento “script” está obsoleto.

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

  1. Remova o atributo charset de todos os elementos <script>.
  2. Certifique-se de que o seu documento declara a sua codificação usando <meta charset="UTF-8"> dentro do <head>.
  3. 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.
  4. 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.

Ajude-nos a melhorar os nossos guias

Este guia foi útil?

Pronto para validar os seus sites?
Comece o seu teste gratuito hoje.