Codificador/Decodificador de Entidades HTML

Codifica caracteres especiales a entidades HTML y viceversa

TextoEntidades HTML

Acerca de Codificador/Decodificador de Entidades HTML

Al codificar, la herramienta convierte los cinco caracteres & < > " ' en &amp; &lt; &gt; &quot; &#39;, pasa 22 símbolos habituales como ©, € o — a entidades con nombre y escribe cualquier otro carácter no ASCII como referencia decimal: la ñ queda como &#241;. Al decodificar sigue las mismas reglas que un navegador: deshace los 2.125 nombres del estándar HTML y las referencias decimales y hexadecimales; los nombres que no están en la tabla se dejan tal cual.

Las entidades sirven para dos cosas: mostrar como texto los caracteres de la sintaxis HTML y evitar que lo que escribe un usuario se interprete como etiquetas o código. Lo segundo es una cuestión de seguridad y solo funciona si se sabe qué caracteres importan en cada sitio.

Los caracteres que de verdad importan contra el XSS

La guía de OWASP contra XSS se organiza por contexto de salida, porque los caracteres peligrosos cambian. En el texto entre etiquetas basta con escapar < y & para que no se abra ninguna etiqueta. Dentro de un atributo entre comillas, lo esencial es la comilla que lo delimita y &; si se olvida la comilla, un atacante puede cerrar el valor y añadir onmouseover=... como atributo nuevo. Como esta herramienta escapa los cinco caracteres, su salida es segura tanto en texto como en atributos entrecomillados.

Hay lugares donde el escape de entidades no sirve:

  • Atributos sin comillas: en <div class=valor>, un espacio, / o = terminan el valor. Ponga siempre comillas.
  • Dentro de <script> y <style>: son elementos de texto sin procesar y las entidades no se decodifican; &lt; se queda como cuatro caracteres. El peligro es la cadena </script>. Serialice los datos como JSON y escape < como \u003c.
  • Atributos de URL como href o src: javascript:alert(1) no contiene nada que escapar, y como el navegador decodifica las entidades del atributo antes de usarlo, javascript&#58;alert(1) también se ejecuta. Valide la URL contra una lista de esquemas permitidos (https:).

&#39; frente a &apos;

El apóstrofo se escribe &#39; por historia: &apos; existe en XML desde el principio pero no formaba parte de HTML 4, y navegadores antiguos y algunos clientes de correo no lo reconocían. El HTML Standard actual de WHATWG sí lo incluye, así que ambos funcionan; &#39; sigue siendo la opción prudente en correos HTML.

La decodificación sigue las reglas del navegador

El estándar HTML define 2.125 referencias con nombre y, por compatibilidad, 106 de ellas (&amp, &lt, &copy, &ntilde…) se reconocen incluso sin punto y coma. El decodificador usa la misma tabla, así que &ntilde;, &aacute;, &iexcl; y un &copy sin punto y coma vuelven a su carácter. Sin punto y coma solo se sustituye el nombre antiguo más largo: &notit; queda como ¬it;. Queda una diferencia: dentro de un atributo, el navegador no decodifica &copy= si al nombre le sigue = o una letra, mientras que esta herramienta aplica siempre la regla del texto de un elemento.

Las referencias numéricas también siguen el estándar. &#128;–&#159; se reinterpretan como los caracteres de Windows-1252 que querían decir los documentos antiguos: &#150; da – (U+2013) y &#146; da ’ (U+2019), no caracteres de control invisibles. &#0;, los sustitutos sueltos como &#xD800; y los valores por encima de U+10FFFF dan U+FFFD. Como en el navegador, el punto y coma tras una referencia numérica es opcional.

Si ve &amp;amp;, es doble codificación

Un título que muestra «Tom &amp; Jerry» literalmente, o un valor que gana otro amp; cada vez que se guarda, se ha escapado dos veces: al guardarlo en la base de datos y otra vez en una plantilla con escape automático. La regla es guardar el texto original y escapar una sola vez, al mostrarlo, según el contexto. Para revisar datos ya dañados, decodifique repetidamente hasta que el texto deje de cambiar.

¿Hace falta escribir la ñ como entidad?

No, si la página se sirve en UTF-8, que es lo que exige el Encoding Standard de WHATWG para contenido nuevo. La ñ ocupa dos bytes en UTF-8 y siete como &#241;. Las referencias numéricas solo tienen sentido cuando no se controla la codificación, por ejemplo al pegar un fragmento en un sistema antiguo.

Ejemplos

Un comentario con etiquetas

Entrada
<img src=x onerror=alert(1)>
Resultado
&lt;img src=x onerror=alert(1)&gt;

Con < escapado no se abre ninguna etiqueta y el navegador muestra el texto. En contenido de elemento es suficiente.

Intento de salir de un atributo

Entrada
" onfocus="alert(1)
Resultado
&quot; onfocus=&quot;alert(1)

Dentro de value="..." la comilla ya no cierra el atributo. Solo vale si el atributo está entre comillas.

Acentos y símbolos

Entrada
Año © 2026 — 10€
Resultado
A&#241;o &copy; 2026 &mdash; 10&euro;

ñ (U+00F1) no está en la tabla de nombres, así que sale como 241; ©, — y € tienen nombre.

Cómo se usa

  1. Pegue el texto.
  2. Elija codificar o decodificar.
  3. Copie el resultado en su HTML o código.

Preguntas frecuentes

¿Basta con codificar entidades para evitar XSS?

En texto de elemento y atributos entrecomillados, sí. Bloques script, atributos de URL, atributos sin comillas y CSS requieren otro tratamiento. Lo recomendable es un motor de plantillas con escape automático y textContent en lugar de innerHTML.

¿Qué es exactamente &nbsp;?

U+00A0, espacio de no separación: impide el salto de línea en ese punto y no se colapsa con otros espacios. Al copiarlo no es un espacio normal y puede romper búsquedas.

¿Por qué no decodifica &hearts sin punto y coma?

Sin punto y coma solo funcionan los 106 nombres antiguos que enumera el estándar HTML (&amp, &copy, &ntilde…), y &hearts no está entre ellos. El navegador también lo deja como texto. Escriba &hearts; con punto y coma.

¿Decimal o hexadecimal?

Son equivalentes. La hexadecimal coincide con la notación U+; la herramienta genera decimal.

Guías relacionadas

Fuentes

Revisado el:

Privacidad y tratamiento de datos