ToolActToolAct

Codificador de Entidades HTML

Convierte caracteres de entidad HTML en línea, soporta codificación y decodificación para prevenir ataques XSS

Texto de Entrada
Caracteres: 0
Bytes: 0
Salida
Caracteres: 0
Bytes: 0

Selecciona Método de Conversión

¿Qué es la Codificación de Entidades HTML?

La codificación de entidades HTML es un mecanismo que convierte caracteres especiales en referencias de entidades HTML. En HTML, ciertos caracteres tienen significados especiales (como <, >, &), y si necesitas mostrar estos caracteres mismos en la página, debes usar codificación de entidades. La codificación de entidades tiene dos formas: entidades con nombre (como &lt;) y entidades numéricas (como &#60;). Las entidades con nombre son más legibles, mientras que las entidades numéricas pueden representar cualquier carácter Unicode. La codificación HTML importa cuando un texto debe insertarse en HTML sin interpretarse como marcado. Caracteres como <, >, &, comillas y apóstrofos pueden cambiar etiquetas, atributos o entidades. La herramienta sirve para ejemplos, plantillas, contenido CMS y depuración de problemas relacionados con XSS. El contexto sigue siendo clave: texto HTML, atributos, URLs, JavaScript y CSS requieren reglas de escape distintas, por lo que la salida debe usarse en el lugar correcto.

Cómo usar

Cómo usar

  1. Escribe o pega el texto a convertir en el cuadro de entrada izquierdo
  2. Haz clic en el botón de conversión correspondiente para elegir el método de codificación o decodificación
  3. El resultado se mostrará automáticamente a la derecha
  4. Haz clic en el botón 'Copiar' para copiar el resultado al portapapeles

Métodos de conversión

HTML Entity EncodeConvierte < > & " ' en entidades con nombre, útil para prevenir XSS
HTML Entity DecodeRestaura las entidades con nombre a sus caracteres originales
Numeric Entity EncodeConvierte caracteres especiales a entidades numéricas (como &#60;)
Full EncodeCodifica todos los caracteres no ASCII, útil para internacionalización
Full DecodeRestaura todas las formas de entidades HTML

Atajos de teclado

  • Ctrl + EHTML Entity Encode
  • Ctrl + DHTML Entity Decode

Consejos de codificación

  • Codifica el texto visible al usuario antes de insertarlo en el HTML, sobre todo si puede contener corchetes angulares, comillas o ampersands.
  • La codificación de entidades HTML evita que el marcado se interprete, pero es solo una parte de la defensa contra XSS y no sustituye al escape contextual de salida.

Casos de uso

Escapar caracteres inseguros antes de insertar texto en HTMLCodifica ampersands, corchetes angulares, comillas y apóstrofos como entidades con nombre para que el texto copiado del usuario aparezca en ejemplos de marcado sin convertirse en etiquetas o atributos. La cadena original nunca se transmite: cada sustitución se ejecuta sobre el valor que escribiste, por lo que la documentación interna, borradores no publicados o fragmentos privados pueden sanitizarse sin subir el texto a un servicio remoto.
Decodificar entidades encontradas en código fuente copiadoCambia a los modos de decodificación de entidad, numérica o completa para convertir &amp;lt;, &#60; u otros fragmentos codificados en texto legible durante la depuración o la limpieza de contenido. La decodificación utiliza el analizador DOM de la página contra un nodo separado, lo que significa que la entrada nunca entra en una solicitud de red y la cadena reconstruida permanece en la misma pestaña del navegador donde se originó.
Elegir entre codificación mínima y completaUsa los modos de entidad o numérico solo para los caracteres HTML críticos, o la codificación completa cuando los caracteres no ASCII también necesiten referencias de caracteres numéricos para un sistema heredado. Elige el modo que se ajuste al conjunto de entidades esperado del destino: por ejemplo, entidades con nombre para HTML legible, entidades numéricas para plantillas CMS antiguas y codificación completa para canales de transporte solo ASCII.
Codificar ampersands y corchetes angulares para pegar seguro en CMSPasa un fragmento de código o una cadena de plantilla por el modo de codificación para que &, <, > y las comillas se conviertan en entidades &amp; &lt; &gt; antes de pegar en un editor de texto enriquecido, plantilla de correo o campo de sitio estático que vuelva a analizar la entrada como HTML. Como la codificación es un paso de regex local, el fragmento original permanece en la página hasta que copies explícitamente la salida, lo cual es útil cuando el código fuente contiene ejemplos confidenciales.
Decodificar JSON dentro de atributos HTML durante la inspecciónCambia a decodificación numérica o completa para convertir &#123; &#x7B; &quot; y secuencias similares en caracteres literales al leer JSON codificado, payloads de webhooks o cadenas de atributos extraídas del código fuente guardado de la página. El JSON decodificado permanece en el área de salida de la derecha; nada se envía a un endpoint de análisis, por lo que los fragmentos de payload de registros de producción pueden inspeccionarse sin salir del navegador.

Principio técnico

HTML utiliza dos tipos de referencias de caracteres definidos por el WHATWG HTML Living Standard. Las referencias de caracteres con nombre comienzan con & y terminan con ;, tomando datos de la tabla entities.json mantenida por WHATWG (aproximadamente 2.231 nombres en la especificación actual, incluyendo alias heredados sin punto y coma final como &amp sin el ;). Las referencias de caracteres numéricas utilizan puntos de código Unicode en formato decimal (&#60;) o hexadecimal (&#x3C;) y pueden codificar cualquier carácter desde U+0000 hasta U+10FFFF excepto el rango de sustitutos U+D800-U+DFFF. Los cinco caracteres que DEBEN escaparse para preservar la seguridad sintáctica de HTML son & (&amp;), < (&lt;), > (&gt;), " (&quot;) y ' (&#39;); ten en cuenta que &apos; es parte de XML y HTML5 pero NO es válido en HTML 4.01, por lo que OWASP recomienda la forma numérica &#39; para atributos delimitados por comillas dobles que deban atravesar analizadores heredados. La codificación en esta herramienta es una sustitución de un solo paso: el orden importa porque & debe escaparse primero, de lo contrario los prefijos de entidad insertados para < y > se volverían a escapar en &amp;lt;. La decodificación aprovecha el analizador HTML del navegador asignando la entrada al innerHTML de un elemento separado y leyendo de vuelta el textContent; esto despacha a la máquina de estados Tokenizer oficial de la especificación HTML (secciones 13.2.5.72 Character reference state a 13.2.5.80), que resuelve correctamente las formas con nombre, decimales y hexadecimales incluyendo entradas malformadas como los que carecen de punto y coma. La codificación numérica para el modo de codificación completa recorre la cadena punto a punto usando String.prototype.codePointAt para manejar caracteres astrales que ocupan un par de sustitutos UTF-16 (por ejemplo, el emoji U+1F600 se convierte en &#128512; y no en la alternativa de dos sustitutos). La prevención de XSS requiere escape consciente del contexto, no solo codificación de entidades HTML. La hoja de trucos OWASP Cross-Site Scripting Prevention define cinco contextos distintos: cuerpo HTML, atributo HTML (con comillas vs sin comillas), datos JavaScript (dentro de <script>), CSS y URL. El escape de entidades HTML cubre solo los contextos 1 y 2. Los contextos JavaScript deben usar escapes \xHH o \uHHHH mediante JSON.stringify, los contextos URL necesitan encodeURIComponent (codificación porcentual RFC 3986) y los manejadores de eventos en línea combinan las reglas porque sus valores pasan por ambos analizadores, el de HTML y el de JavaScript. Una cabecera Content-Security-Policy con script-src 'self' y 'unsafe-inline' eliminado es la capa moderna de defensa en profundidad que atrapa errores de escape, y los destinos DOM como innerHTML, document.write y setAttribute('on*', ...) deben reemplazarse con textContent o enlaces administrados por frameworks (JSX de React, llaves de Vue) que escapan por defecto.

  • Referencias con nombre: aproximadamente 2.231 entradas en WHATWG entities.json; los cinco nombres obligatorios de escapar son &amp; &lt; &gt; &quot; &apos; (&apos; es solo HTML5/XML, no HTML 4.01)
  • Referencias numéricas: decimal &#DDDDD; y hexadecimal &#xHHHH; cubren U+0000 a U+10FFFF; los sustitutos U+D800-U+DFFF y U+0000 NULL son inválidos según la especificación HTML
  • Orden de escape: & debe reemplazarse primero, de lo contrario el prefijo &amp; insertado en escapes posteriores se codifica doble; la codificación es O(n) con una tabla de búsqueda de 5 entradas
  • Decodificación mediante DOMParser: asignar al innerHTML de un elemento separado invoca el tokenizador de la especificación HTML (Character reference state, secciones 13.2.5.72-80) que maneja entidades heredadas sin punto y coma final
  • Manejo de caracteres astrales: usar String.prototype.codePointAt y la iteración for...of para que los emojis y caracteres de la extensión B del CJK (U+10000+) produzcan un solo &#NNNNN; en lugar de dos referencias de sustitutos
  • Escape consciente del contexto (regla #0 de OWASP XSS Prevention Cheat Sheet): cuerpo HTML, atributo HTML, JavaScript, CSS y URL cada uno necesita un escape diferente; las entidades HTML por sí solas no detienen XSS en destinos JS o URL
  • Defensa en profundidad: Content-Security-Policy script-src 'self' (estilo RFC), saneamiento de lista de permitidos con DOMPurify para entrada de texto enriquecido, y preferir textContent/innerText sobre innerHTML en código DOM vanilla

Ejemplos

Codificación básica de elementos

Entrada: <script>alert(1)</script>
Salida: &lt;script&gt;alert(1)&lt;/script&gt;
Uso:    evita que el navegador interprete el texto como una etiqueta real al renderizar contenido proporcionado por el usuario

Codificación de valores de atributos

Entrada: <div title="Hello & world">
Salida: &lt;div title=&quot;Hello &amp; world&quot;&gt;
Nota:   las comillas y el ampersand dentro del atributo se codifican como entidades para que el valor no pueda salir de las comillas

URL mostrada en una página

Entrada: search?q=hello&lang=en
Salida: search?q=hello&amp;lang=en
Uso:    la página debe codificar el & antes de insertar la URL en HTML, de lo contrario el parser puede tratar el resto como una entidad mal formada

Caracteres no ASCII (codificación completa)

Entrada: caracteres CJK como 中文
Salida: forma numérica UTF-8 completa &#20013;&#25991; (o entidades nombradas si la página las admite)
Uso:    incrustación segura de Unicode arbitrario en HTML legacy; las páginas modernas suelen confiar en UTF-8

Preguntas frecuentes

¿Qué caracteres convierte el encoding HTML?

Los cinco caracteres reservados de SGML: & → &amp;, < → &lt;, > → &gt;, " → &quot;, ' → &#39; (o &apos;). Opcionalmente, los caracteres no ASCII pueden convertirse a entidades numéricas (&#xNN;) para sistemas heredados que no manejan UTF-8.

¿Cuándo necesito codificar HTML?

Siempre que insertes texto proporcionado por el usuario en contenido HTML. No codificar es la causa raíz de las vulnerabilidades XSS. Codifica el contenido de usuario para el cuerpo HTML, valores de atributos, contexto JavaScript, contexto CSS y contexto URL: cada contexto tiene reglas ligeramente distintas.

¿Cuál es la diferencia entre &#39; y &apos;?

Ambos producen una comilla simple. &apos; se añadió en HTML5 pero no es válido en HTML4 ni en clientes de correo antiguos: si tu salida la leen sistemas viejos, usa &#39;. La página emite &#39; por defecto para máxima compatibilidad.

¿Por qué mi salida sigue conteniendo &amp;?

Si la entrada ya contiene una entidad HTML como &amp;, codificarla produce &amp;amp;, lo cual es correcto porque el ampersand de entrada era un carácter literal, no una entidad. Decodifica primero si tu fuente ya viene codificada con entidades.

¿Se convierten los emojis?

Los emojis son Unicode válido y el HTML moderno los maneja como caracteres normales: no requieren codificación salvo que tu sistema destino exija solo ASCII. Activa «entidad numérica para no ASCII» para convertirlos a la forma &#xNNNN;.

¿La codificación es lo mismo que URL encoding?

No. La codificación de URL (percent-encoding) sustituye caracteres no seguros por secuencias %NN para usar en URLs. La codificación HTML los sustituye por entidades nombradas o numéricas para usar en HTML. Usa la herramienta correcta para cada contexto: mezclarlas crea bugs de doble codificación.

¿La conversión se hace localmente?

Sí. La codificación y decodificación ocurren en tu navegador. El texto pegado no se sube a ningún sitio.