ToolHub
View All Posts

Guía completa de entidades HTML

Las entidades HTML son uno de los aspectos más fundamentales pero frecuentemente mal entendidos del desarrollo web. Son el mecanismo que permite a los navegadores mostrar caracteres que de otro modo serían interpretados como marcado HTML, y juegan un papel crucial en la seguridad web. Ya sea que estés codificando caracteres especiales para prevenir ataques de cross-site scripting, mostrando símbolos matemáticos o asegurando que el contenido se renderice correctamente en diferentes codificaciones, comprender las entidades HTML es esencial.

¿Qué son las entidades HTML?

Una entidad HTML es una secuencia de caracteres que representa un solo carácter en HTML. Las entidades comienzan con un ampersand (&) y terminan con un punto y coma (;). Cuando un navegador encuentra una entidad, la reemplaza con el carácter correspondiente durante el renderizado. Este mecanismo te permite incluir caracteres en HTML que de otro modo serían imposibles o problemáticos.

<) inicia una etiqueta, el signo mayor que (>) la cierra, y el ampersand (&) inicia una referencia de entidad. Si deseas mostrar estos caracteres como contenido visible en lugar de marcado, debes codificarlos como entidades.

Principio fundamental: Cualquier carácter que tenga significado especial en la sintaxis HTML debe codificarse como entidad cuando aparezca como contenido. Esto no es opcional — es un requisito del HTML válido.

Entidades HTML comunes

Aunque HTML define más de 2,000 entidades nombradas, solo un puñado se utiliza con frecuencia en el desarrollo web diario. Estas son las entidades que encontrarás y usarás con más frecuencia:

Cinco entidades esenciales

CarácterEntidades con nombreEntidad decimalEntidad hexadecimalUso
&&&Debe codificarse siempre para evitar ambigüedad con referencias de entidad<
<<<Debe codificarse para prevenir la apertura de etiquetas HTML>
>>>Debe codificarse para prevenir el cierre de etiquetas HTML"
"""Debe codificarse dentro de valores de atributo con comillas dobles'
''Debe codificarse dentro de valores de atributo con comillas simplesEspacio no separable (previene saltos de línea)Símbolo de copyright

Entidades de símbolos comunes

CarácterEntidades con nombreDescripción
Símbolo de marca registradaSímbolo de marca comercialGuión largo (em dash)
Guión corto (en dash, para rangos)Comilla angular doble izquierdaComilla angular doble derecha
Carácter de viñetaElipsis horizontal (tres puntos) Registered trademark symbol
&trade; Trademark symbol
&mdash; Em dash (long dash)
&ndash; En dash (short dash, for ranges)
«&laquo; Left-pointing double angle quotation mark
»&raquo; Right-pointing double angle quotation mark
&bull; Bullet character
&hellip; Horizontal ellipsis (three dots)

Entidades numéricas vs entidades con nombre

Las entidades HTML vienen en dos formas: nombradas y numéricas. Comprender la diferencia te ayuda a elegir la entidad correcta para cada situación.

Entidades con nombre

Las entidades nombradas utilizan palabras legibles por humanos para identificar caracteres. Por ejemplo, < representa el signo menor que, y © representa el símbolo de copyright. Las entidades nombradas son más legibles y memorables, haciendo tu código fuente HTML más mantenible. Sin embargo, las entidades nombradas solo existen para un conjunto limitado de caracteres — aproximadamente 2,000 — mientras que Unicode tiene más de 140,000 caracteres.

Entidades numéricas

Las entidades numéricas hacen referencia a caracteres por su punto de código Unicode. Vienen en dos formas: decimal y hexadecimal. Las entidades numéricas decimales utilizan el formato &#NNN;, donde NNN es el punto de código decimal. Las entidades hexadecimales utilizan el formato &#xHHH;, donde HHH es el punto de código hexadecimal. Por ejemplo, el símbolo de copyright puede escribirse como © (decimal) o © (hexadecimal).

Las entidades numéricas pueden representar cualquier carácter Unicode, haciéndolas esenciales para caracteres que no tienen referencia de entidad nombrada. Si necesitas mostrar caracteres CJK raros, glifos de escrituras históricas o emojis que carecen de entidades nombradas, debes usar la forma numérica.

Cuándo usar cada una

Cuándo usar entidades HTML

Saber cuándo usar entidades es tan importante como saber cómo usarlas. Aquí están los principales escenarios donde las entidades son necesarias o beneficiosas:

1. Mostrar caracteres reservados

< desnudo, el navegador intentará analizarlo como el inicio de una etiqueta HTML, lo que podría romper el diseño de tu página o crear vulnerabilidades de seguridad.

2. Prevenir ambigüedad de ampersands

Un ampersand seguido de letras y un punto y coma siempre se interpreta como una referencia de entidad. Si tu contenido incluye un ampersand que no es parte de una entidad (por ejemplo, en "Tom & Jerry"), debes codificarlo como &. Un ampersand no codificado seguido de texto que coincida con un nombre de entidad será decodificado incorrectamente. Por ejemplo, "AT&T" no codificado podría convertirse en "AT&T" si "T" coincidiera con una entidad.

3. Incluir caracteres que no están en el teclado

Caracteres como guiones largos, símbolos de copyright y operadores matemáticos pueden ser difíciles de escribir en un teclado estándar. Las entidades proporcionan una forma confiable de incluir estos caracteres sin depender del método de entrada o mapa de caracteres de tu editor. Por ejemplo, — suele ser más fácil de escribir que buscar el carácter del guión largo en el teclado.

4. Espacio de no separación

La entidad   crea un espacio no separable que evita que el navegador rompa la línea en esa posición. Esto es crucial para mantener palabras relacionadas en la misma línea, como "10 kg", "Capítulo 3" o nombres de marca que no deberían dividirse entre líneas. También se usa comúnmente para crear espaciado visual en diseños donde CSS no es apropiado.

Implicaciones de seguridad: Protección XSS

La codificación de entidades HTML es una de las líneas de defensa más importantes contra los ataques de cross-site scripting (XSS). El XSS ocurre cuando un atacante puede inyectar código ejecutable en una página web vista por otros usuarios. La codificación de entidades previene esto convirtiendo caracteres peligrosos en sus equivalentes de entidad seguros.

Cómo la codificación de entidades previene XSS

Considera una página de búsqueda que muestra la consulta del usuario en el título de resultados. Si un usuario busca <script>alert("xss")</script> y la página lo renderiza sin codificar, el navegador ejecutará ese script. Sin embargo, si la salida está codificada como entidad, se convierte en &lt;script&gt;alert("xss")&lt;/script&gt;, y el navegador lo muestra como texto literal en lugar de ejecutar código.

Reglas de codificación específicas del contexto

La codificación de entidades funciona en contextos de contenido y atributos HTML, pero diferentes contextos requieren diferentes estrategias de codificación:

Advertencia de seguridad: Nunca confíes únicamente en la codificación de entidades del lado del cliente para la seguridad. Realiza siempre la codificación de salida en el lado del servidor al renderizar datos proporcionados por el usuario en HTML. La codificación del lado del cliente puede ser eludida si JavaScript está desactivado o si hay errores en la lógica de codificación.

Codificación de entidades en diferentes contextos

En atributos HTML

Los valores de atributo requieren una codificación más estricta que el contenido HTML porque los atributos usan comillas como delimitadores. Los valores de atributo con comillas dobles deben codificar los caracteres de comillas dobles, y los valores con comillas simples deben codificar las comillas simples. Los ampersands y los corchetes angulares también deben codificarse.

<!-- Correct: entity-encoded attribute value -->
<a title="5 &gt; 3 is true">Example</a>

<!-- Incorrect: unencoded special characters -->
<a title="5 > 3 is true">Example</a>

En el ejemplo incorrecto, el > dentro de un valor de atributo puede causar problemas de análisis en ciertos contextos, incluso si la mayoría de los navegadores lo manejan con gracia. El HTML válido requiere codificar estos caracteres en los atributos.

En JavaScript

Las entidades HTML no se procesan dentro de las etiquetas <script>. Si necesitas incluir caracteres especiales en código JavaScript incrustado en HTML, debes usar las secuencias de escape propias de JavaScript:

<!-- Wrong: entities don't work in script tags -->
<script>
  var msg = "5 &gt; 3"; // This is literal "&gt;", not ">"
</script>

<!-- Correct: use JavaScript escapes -->
<script>
  var msg = "5 \u003E 3"; // Unicode escape
  var msg2 = "5 > 3";     // Or just use the character directly
</script>

Al inyectar datos desde el servidor en JavaScript en línea, el enfoque más seguro es usar JSON.stringify() en el lado del servidor y colocar el resultado dentro del script. Esto maneja automáticamente todo el escape necesario, incluyendo comillas, barras invertidas y caracteres de control.

En CSS

De manera similar, las entidades HTML no se procesan dentro de las etiquetas <style>. CSS tiene su propio mecanismo de escape usando una barra invertida seguida del punto de código Unicode hexadecimal del carácter:

<!-- Wrong: entities don't work in style tags -->
<style>
  .quote::before { content: "&ldquo;"; }
</style>

<!-- Correct: use CSS Unicode escapes -->
<style>
  .quote::before { content: "\201C"; }
</style>

Las secuencias de escape CSS usan una barra invertida seguida de uno a seis dígitos hexadecimales. Si se usan menos de seis dígitos y el siguiente carácter podría interpretarse como un dígito hexadecimal, añade un espacio después de la secuencia de escape.

Compatibilidad de navegadores

El soporte de entidades HTML es excelente en todos los navegadores modernos. Las cinco entidades requeridas (&, <, >, ", ') han sido soportadas desde los primeros navegadores. Las entidades nombradas para símbolos comunes como ©, ® y ™ también tienen soporte universal.

Los principales problemas de compatibilidad involucran entidades nombradas menos comunes introducidas en HTML5 y especificaciones posteriores. Algunos navegadores más antiguos pueden no reconocer entidades como + o ∉. Para máxima compatibilidad, usa entidades numéricas para caracteres poco comunes, ya que el soporte de entidades numéricas depende solo del soporte de Unicode, que es universal en los navegadores modernos.

Una nota especial: la entidad ' no era parte de HTML 4 y solo se definió en XHTML. Aunque todos los navegadores modernos la soportan, si necesitas compatibilidad con navegadores muy antiguos, usa ' para la codificación de comillas simples.

Consejos prácticos para usar entidades

¿Necesitas codificar o decodificar entidades HTML? Prueba nuestra herramienta gratuita de codificador de entidades HTML. Procesa texto instantáneamente en tu navegador sin enviar datos a ningún servidor.

Prueba el codificador de entidades HTML

Preguntas frecuentes

¿Cuál es la diferencia entre entidades HTML con nombre y numéricas?

Las entidades nombradas usan nombres legibles como & para el ampersand y < para el signo menor que. Las entidades numéricas usan el punto de código Unicode del carácter, ya sea en forma decimal (&) o hexadecimal (&). Las entidades nombradas son más legibles pero solo existen para caracteres comunes. Las entidades numéricas pueden representar cualquier carácter Unicode.

¿Pueden las entidades HTML prevenir ataques XSS?

La codificación de entidades HTML es una defensa clave contra XSS al generar datos proporcionados por el usuario en contenido y atributos HTML. Al codificar caracteres especiales como <, > y &, evitas que los atacantes inyecten HTML o JavaScript ejecutable. Sin embargo, la codificación de entidades no es suficiente en todos los contextos — necesitas codificación específica para contextos de JavaScript, CSS y URL.

¿Cuándo es obligatorio usar entidades HTML?

Debes usar entidades HTML cuando necesites mostrar caracteres que tienen significado especial en HTML: & (ampersand), < (signo menor que), > (signo mayor que), " (comillas dobles en atributos) y ' (comillas simples en atributos). También debes usar entidades para caracteres que no puedes escribir directamente, como símbolos de copyright, guiones largos y espacios no separables.

¿Siguen siendo necesarias las entidades HTML con UTF-8?

Sí, las entidades HTML siguen siendo necesarias incluso con codificación UTF-8. Aunque UTF-8 te permite incluir la mayoría de los caracteres directamente, los cinco caracteres reservados (&, <, >, ", ') aún deben codificarse como entidades cuando aparecen en contenido o atributos HTML. Las entidades también son útiles para caracteres invisibles como espacios no separables y espacios de ancho cero.

¿Se pueden usar entidades HTML en CSS o JavaScript?

Las entidades HTML no se procesan dentro de las etiquetas <style> o <script>. En CSS, usa secuencias de escape Unicode como \2014 para un guión largo. En cadenas de JavaScript, usa escapes Unicode como \u2014 o caracteres UTF-8 reales. Las entidades HTML solo son efectivas en contenido y valores de atributo HTML, no en contextos de script o estilo.