Acerca de este problema HTML
El atributo charset se usaba históricamente para declarar la codificación de caracteres de un archivo de script externo cuando difería de la codificación del documento. En HTML moderno, este atributo está obsoleto porque la especificación HTML ahora requiere que la codificación de caracteres de un script externo debe coincidir con la codificación del documento mismo. Dado que la codificación del documento ya se declara mediante <meta charset="UTF-8"> (o a través de cabeceras HTTP), especificarla nuevamente en elementos <script> individuales es redundante y ya no es válido.
Si tus archivos de script externos usan una codificación diferente a la de tu documento HTML, la solución correcta es convertir esos archivos de script para que coincidan con la codificación del documento (típicamente UTF-8) en lugar de usar el atributo charset. UTF-8 es la codificación recomendada para todo el contenido web y es compatible universalmente en todos los navegadores.
Esto importa para el cumplimiento de estándares — el estándar viviente de HTML marca explícitamente este atributo como obsoleto. También afecta la mantenibilidad, ya que tener declaraciones de codificación dispersas en las etiquetas de script puede crear confusión sobre qué codificación está realmente en efecto. Los navegadores también pueden ignorar completamente el atributo, lo que lleva a comportamientos inesperados si dependes de él.
Cómo solucionarlo
-
Elimina el atributo
charsetde todos los elementos<script>. -
Asegúrate de que tu documento declare su codificación usando
<meta charset="UTF-8">dentro del<head>. - Convierte cualquier archivo de script que no esté ya en UTF-8 para que use codificación UTF-8. La mayoría de editores de código modernos pueden hacer esto mediante “Guardar con Codificación” o una opción similar.
-
Ya que estás en ello, también puedes eliminar
type="text/javascript"— este es el tipo predeterminado para scripts y ya no es necesario.
Ejemplos
Incorrecto: usando el atributo charset obsoleto
<script src="app.js" type="text/javascript" charset="UTF-8"></script>
Esto provoca la advertencia de validación porque charset está obsoleto. El type="text/javascript" también es innecesario ya que es el predeterminado.
Incorrecto: charset en un script inline
<script charset="UTF-8">
console.log("Hello");
</script>
El atributo charset solo era significativo para scripts externos, e incluso en ese contexto ahora está obsoleto.
Correcto: elemento script limpio
<script src="app.js"></script>
Correcto: asegurándose de que la codificación se declare a nivel del 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>
La declaración <meta charset="UTF-8"> en el <head> cubre la codificación para todo el documento, incluyendo todos los scripts vinculados. No se necesitan atributos charset adicionales en elementos individuales.
Encuentra problemas como este automáticamente
Rocket Validator escanea miles de páginas en segundos, detectando problemas de HTML en todo tu sitio web.
Más información: