Codificador de Entidades HTML
Convierte caracteres de entidad HTML en línea, soporta codificación y decodificación para prevenir ataques XSS
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 <) y entidades numéricas (como <). 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
- Escribe o pega el texto a convertir en el cuadro de entrada izquierdo
- Haz clic en el botón de conversión correspondiente para elegir el método de codificación o decodificación
- El resultado se mostrará automáticamente a la derecha
- Haz clic en el botón 'Copiar' para copiar el resultado al portapapeles
Métodos de conversión
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
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 & sin el ;). Las referencias de caracteres numéricas utilizan puntos de código Unicode en formato decimal (<) o hexadecimal (<) 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 & (&), < (<), > (>), " (") y ' ('); ten en cuenta que ' es parte de XML y HTML5 pero NO es válido en HTML 4.01, por lo que OWASP recomienda la forma numérica ' 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 &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 😀 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 & < > " ' (' 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 & 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: <script>alert(1)</script>
Uso: evita que el navegador interprete el texto como una etiqueta real al renderizar contenido proporcionado por el usuarioCodificación de valores de atributos
Entrada: <div title="Hello & world">
Salida: <div title="Hello & world">
Nota: las comillas y el ampersand dentro del atributo se codifican como entidades para que el valor no pueda salir de las comillasURL mostrada en una página
Entrada: search?q=hello&lang=en
Salida: search?q=hello&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 formadaCaracteres no ASCII (codificación completa)
Entrada: caracteres CJK como 中文
Salida: forma numérica UTF-8 completa 中文 (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-8Preguntas frecuentes
¿Qué caracteres convierte el encoding HTML?
Los cinco caracteres reservados de SGML: & → &, < → <, > → >, " → ", ' → ' (o '). 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 ' y '?
Ambos producen una comilla simple. ' 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 '. La página emite ' por defecto para máxima compatibilidad.
¿Por qué mi salida sigue conteniendo &?
Si la entrada ya contiene una entidad HTML como &, codificarla produce &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.