Skip to main content
Validación HTML

Una referencia de carácter numérico se expandió al rango de controles C1.

Acerca de este problema HTML

El rango de controles C1 abarca los puntos de código Unicode U+0080 hasta U+009F (decimal 128–159). Estos son caracteres de control heredados de estándares de codificación más antiguos, y la especificación HTML prohíbe explícitamente las referencias de carácter numérico que se resuelvan a ellos. Cuando el validador W3C encuentra una referencia como — (decimal 151, que es U+0097), la marca porque estos puntos de código no son caracteres de contenido válidos.

Por qué sucede esto

Este problema casi siempre surge de una confusión entre la codificación de caracteres Windows-1252 (o CP-1252) y Unicode. Windows-1252 es una codificación heredada que reutiliza el rango de bytes 0x80–0x9F para almacenar caracteres útiles como comillas curvadas, rayas largas y el símbolo del euro. En Unicode, sin embargo, esas mismas posiciones de puntos de código están reservadas como caracteres de control C1 y no tienen significado imprimible.

Cuando el texto codificado originalmente en Windows-1252 se convierte a referencias numéricas HTML byte por byte — sin el re-mapeo apropiado a Unicode — terminas con referencias como ” en lugar del correcto ” para una comilla doble derecha. El valor del byte tenía significado en Windows-1252, pero el punto de código Unicode correspondiente es un carácter de control.

Por qué es importante

  • Cumplimiento de estándares: La especificación HTML prohíbe estas referencias. Los navegadores pueden manejarlas de manera inconsistente, algunos las re-mapean silenciosamente y otros las ignoran completamente.
  • Portabilidad: Aunque algunos navegadores aplican el re-mapeo de Windows-1252 como una peculiaridad de compatibilidad, este comportamiento no está garantizado en todos los agentes de usuario, plataformas o contextos (como XML o XHTML, donde estas referencias causan errores de análisis).
  • Accesibilidad: Los lectores de pantalla y otras tecnologías de asistencia pueden no interpretar en absoluto los caracteres de control C1, resultando en contenido faltante o corrupto para usuarios que dependen de ellos.
  • Integridad de datos: Si tu HTML es procesado por herramientas, APIs o analizadores que siguen la especificación estrictamente, estas referencias inválidas pueden causar fallos o pérdida de datos.

Cómo solucionarlo

  1. Usa referencias de carácter con nombre donde estén disponibles — son la opción más legible (ej., —, ’, €).
  2. Usa puntos de código Unicode correctos en referencias numéricas si una referencia con nombre no está disponible (ej., — o para una raya larga).
  3. Usa el carácter UTF-8 literal directamente en tu archivo fuente. Si tu documento está guardado como UTF-8 (como debería ser), puedes simplemente escribir , ', o directamente.
  4. Audita contenido heredado que puede haber sido migrado desde sistemas o bases de datos más antiguas usando codificación Windows-1252. Una búsqueda de referencias numéricas en el rango decimal 128–159 encontrará todas las instancias.

Ejemplos

Inválido: referencias del rango de controles C1

Estas referencias se resuelven a puntos de código de control C1, no a los caracteres deseados:

<p>Price: &#128;50</p>
<p>She said, &#147;Hello.&#148;</p>
<p>2020&#150;2024</p>
<p>Wait &#151; what?</p>
<p>It&#146;s a beautiful day.</p>

Corregido: referencias Unicode correctas

Reemplaza cada referencia inválida con el punto de código Unicode apropiado o referencia con nombre:

<p>Price: &euro;50</p>
<p>She said, &ldquo;Hello.&rdquo;</p>
<p>2020&ndash;2024</p>
<p>Wait &mdash; what?</p>
<p>It&rsquo;s a beautiful day.</p>

Corregido: usando puntos de código Unicode numéricos

Si prefieres referencias numéricas, usa los valores Unicode correctos:

<p>Price: €50</p>
<p>She said, &#8220;Hello.&#8221;</p>
<p>2020&#8211;2024</p>
<p>Wait &#8212; what?</p>
<p>It&#8217;s a beautiful day.</p>

Corregido: usando caracteres UTF-8 literales

El enfoque más simple — simplemente usa los caracteres directamente en un documento codificado en UTF-8:

<p>Price: €50</p>
<p>She said, "Hello."</p>
<p>2020–2024</p>
<p>Wait — what?</p>
<p>It's a beautiful day.</p>

Encuentra problemas como este automáticamente

Rocket Validator escanea miles de páginas en segundos, detectando problemas de HTML en todo tu sitio web.

Ayúdanos a mejorar nuestras guías

¿Te ha sido útil esta guía?

¿Listo para validar tus sitios?
Inicia tu prueba gratuita hoy.