Codificador / Decodificador de Entidades HTML

Escapa y desescapa entidades HTML. Convierte < > & " ' en entidades con nombre, codifica opcionalmente todos los caracteres no ASCII y decodifica referencias con nombre o numéricas.

Escapa texto para que sea seguro dentro de HTML, o convierte entidades de vuelta a caracteres. Escribe en cualquiera de los campos para convertir en ese sentido. El modo mínimo escapa solo los cinco caracteres que importan; el modo extendido codifica además todos los caracteres no ASCII.

Entidades habituales

Carácter Con nombre Numérica
& &amp; &#38;
< &lt; &#60;
> &gt; &#62;
" &quot; &#34;
' &#39; &#39;
\u{00A0} &nbsp; &#160;
\u{00A9} &copy; &#169;
\u{20AC} &euro; &#8364;

Entidades HTML y por qué importa escapar

Los cinco caracteres que rompen el HTML

Un analizador de HTML lee < como el inicio de una etiqueta y & como el inicio de una referencia de entidad. Si tu contenido contiene alguno, el analizador deja de tratarlo como texto. Escapar sustituye el carácter por una referencia que el analizador resuelve al glifo original sin darle nunca significado estructural.

Solo cinco caracteres necesitan escaparse de verdad en HTML:

  • & pasa a &amp; — debe ir primero, o escaparás dos veces todo lo demás
  • < pasa a &lt;
  • > pasa a &gt;
  • " pasa a &quot; — necesario dentro de valores de atributo con comillas dobles
  • ' pasa a &#39; — necesario dentro de valores con comillas simples

En el texto de un elemento solo hacen falta & y <. Los otros tres importan en cuanto el texto pueda acabar dentro de un atributo, y como rara vez lo controlas en el momento de escapar, escapar los cinco es el hábito seguro.

Referencias con nombre, decimales y hexadecimales

El mismo carácter se puede escribir de tres formas. Un espacio de no separación es &nbsp;, &#160; o &#xA0;. Las referencias con nombre son las más legibles, pero la lista de HTML5 tiene unas 2.200 entradas y los analizadores antiguos conocen muchas menos, así que los nombres poco frecuentes son un riesgo de portabilidad. Las numéricas funcionan con cualquier punto de código Unicode y siempre son seguras. En HTML5 toda referencia con nombre exige el punto y coma final; unos pocos nombres heredados como &amp aún se analizan sin él por compatibilidad, pero confiar en eso es un error esperando a suceder.

Escapar no es sanear

Escapar es lo que detiene el cross-site scripting: si una entrada de usuario con <script> se escapa a &lt;script&gt;, el navegador muestra el texto literal y no ejecuta nada. Pero escapar solo funciona en el contexto correcto. El escapado HTML no basta dentro de un bloque <script>, dentro de un atributo style o en una URL: cada uno tiene sus propias reglas. Y debe aplicarse una sola vez, al generar la salida. Escapar en la entrada y otra vez en la salida produce &amp;lt; y basura visible.

Cuándo necesitas el modo extendido

Ninguna especificación moderna exige escapar los caracteres no ASCII. Un documento UTF-8 puede contener é y directamente, y suele ser la mejor opción: es más corto, más legible y más fácil de buscar. El modo extendido existe para cuando el flujo de bytes debe sobrevivir a un canal que destroza lo no ASCII: plantillas de correo heredadas, campos de CMS antiguos, tuberías XML con codificación declarada dudosa o un paso de compilación atascado en Latin-1. Si controlas la codificación de extremo a extremo, quédate en modo mínimo.

La trampa del espacio de no separación

&nbsp; es U+00A0, un carácter distinto del espacio normal U+0020. Impide el salto de línea y evita que el navegador colapse secuencias de espacios, por eso los editores WYSIWYG lo emiten sin medida. Como se ve idéntico, rompe en silencio comparaciones de cadenas, expresiones regulares escritas con \s en algunos motores e importaciones CSV. Si un valor parece correcto pero no coincide, busca un espacio de no separación colado.

Aviso de código abierto: implementado con operaciones simples de cadenas y puntos de código. No se usa ninguna biblioteca de terceros.

Preguntas frecuentes

¿Hay que escapar el signo mayor que?
Estrictamente no: un > suelto en el texto no es ambiguo y se analiza bien. Se escapa por convención porque no cuesta nada y evita confusiones en el marcado generado, sobre todo si la salida la procesan luego herramientas más estrictas que un navegador.
¿Por qué hay que escapar & primero?
Porque todas las demás secuencias de escape empiezan por ampersand. Si sustituyes < por &lt; antes de escapar &, la siguiente pasada convertiría ese ampersand en &amp; y acabarías con &amp;lt; en la página.
¿Basta con escapar para evitar XSS?
Solo en contextos de texto y atributos HTML, y solo si se aplica al generar la salida. El contenido inyectado en JavaScript, CSS o una URL necesita las reglas de escapado de ese lenguaje. Escapar es una capa, no una defensa completa.
¿Entidades con nombre o numéricas?
Las numéricas tienen soporte universal y sirven para cualquier punto de código. Las de nombre son más legibles para las pocas que todos reconocen. En la práctica: nombre para los cinco caracteres básicos y numéricas para lo inusual.
¿Debo codificar los caracteres acentuados?
No en un documento UTF-8, que es prácticamente todo el contenido web moderno. Escríbelos directamente. Usa el modo extendido solo si algo en tu tubería no transporta bytes no ASCII de forma fiable.
¿Qué diferencia hay entre &nbsp; y un espacio normal?
El espacio de no separación es el punto de código U+00A0. Se ve igual, pero impide el ajuste de línea y no se colapsa con el espacio contiguo. También es un carácter distinto al comparar, lo que lo convierte en una fuente habitual de errores sutiles.