Acerca de este problema HTML
¿Qué son los caracteres de control?
Los caracteres de control ocupan los puntos de código U+0000 hasta U+001F y U+007F hasta U+009F en Unicode. Originalmente fueron diseñados para controlar dispositivos de hardware (por ejemplo, U+0002 es “Inicio de Texto”, U+0007 es “Campana”, U+001B es “Escape”). Estos caracteres no tienen representación visual y no llevan significado semántico en un documento web.
La especificación HTML prohíbe explícitamente las referencias de carácter que se resuelven a la mayoría de caracteres de control. Aunque la sintaxis  es una referencia de carácter estructuralmente válida, el carácter al que apunta no es un carácter de contenido permitido. El validador W3C genera este error para señalar referencias como �, , ,  y otras que caen dentro de los rangos de caracteres de control.
Por qué esto es un problema
- Cumplimiento de estándares: El WHATWG HTML Living Standard define un conjunto específico de puntos de código de “no caracteres” y “caracteres de control” que no deben ser referenciados. Usarlos produce un error de análisis.
- Renderizado impredecible: Los navegadores manejan los caracteres de control ilegales de manera inconsistente. Algunos pueden descartarlos silenciosamente, otros pueden renderizar un carácter de reemplazo (�), y otros pueden exhibir comportamiento inesperado.
- Accesibilidad: Los lectores de pantalla y otras tecnologías de asistencia pueden atascarse o malinterpretar los caracteres de control, degradando la experiencia para usuarios que dependen de estas herramientas.
- Integridad de datos: Los caracteres de control en tu marcado a menudo indican un error de copiar y pegar, una fuente de datos corrupta, o un error de plantilla que inserta datos binarios sin procesar en la salida HTML.
Cómo solucionarlo
-
Identifica la referencia problemática — busca referencias de carácter como
,,�,o similares que apunten a puntos de código de caracteres de control. - Determina la intención — averigua qué carácter o contenido se pretendía realmente. A menudo, una referencia de carácter de control es el resultado de un error en una tubería de datos o motor de plantillas.
- Elimina o reemplaza — o bien borra la referencia completamente o reemplázala con el carácter imprimible correcto o entidad HTML.
Ejemplos
Incorrecto: Referencia de carácter de control
Este marcado contiene , que se expande al carácter de control U+0002 (Inicio de Texto) y desencadena el error de validación:
<p>Algo de texto  más texto</p>
Incorrecto: Forma hexadecimal de un carácter de control
El mismo problema ocurre con la sintaxis hexadecimal:
<p>Datos: </p>
Correcto: Eliminar la referencia de carácter de control
Si el carácter de control fue no intencional, simplemente elimínalo:
<p>Algo de texto más texto</p>
Correcto: Usar una referencia de carácter válida en su lugar
Si pretendías mostrar un carácter especial, usa el punto de código imprimible correcto o entidad nombrada. Por ejemplo, para mostrar una viñeta (•), símbolo de copyright (©), o ampersand (&):
<p>Elemento • Detalles</p>
<p>Copyright © 2024</p>
<p>Tom & Jerry</p>
Correcto: Documento completo sin caracteres de control
<!DOCTYPE html>
<html lang="en">
<head>
<title>Página de Ejemplo</title>
</head>
<body>
<p>Este párrafo usa solo referencias de carácter válidas: & < > ©</p>
</body>
</html>
Puntos de código de caracteres de control comunes a evitar
| Referencia | Punto de código | Nombre |
|---|---|---|
� |
U+0000 | Nulo |
 |
U+0001 | Inicio de Encabezado |
 |
U+0002 | Inicio de Texto |
 |
U+0007 | Campana |
 |
U+0008 | Retroceso |
 |
U+000B | Tabulación Vertical |
 |
U+000C | Avance de Página |
 |
U+007F | Eliminar |
Si tu contenido se genera dinámicamente (desde una base de datos, API, o entrada de usuario), sanea los datos antes de insertarlos en HTML para eliminar caracteres de control. La mayoría de lenguajes del lado del servidor y motores de plantillas proporcionan utilidades para este propósito.
Encuentra problemas como este automáticamente
Rocket Validator escanea miles de páginas en segundos, detectando problemas de HTML en todo tu sitio web.