Codificador y Decodificador de Entidades HTML
Codifica texto a entidades HTML seguras o decodifícalas, al instante — herramienta gratis para desarrolladores.
Tu texto se queda en tu equipo
Nada que borrar después
Seguro para datos reales de usuarios
Funciona en todo navegador moderno
Cómo funciona
- 1
Pega tu texto
Una cadena con corchetes angulares, un ampersand, comillas o letras acentuadas que debe ir dentro de marcado.
- 2
Elige el contexto
Texto, valor de atributo o codificación completa: cada uno escapa un conjunto distinto de caracteres.
- 3
Copia el resultado
Pégalo en una plantilla, un documento XML, un feed o el cuerpo de un correo.
Por qué usar esta herramienta
El contexto se elige, no se adivina
Escapar para texto, para un valor de atributo y para una URL son tres trabajos distintos, y eliges cuál.
La doble codificación se detecta
Se avisa si la entrada ya contiene entidades, para que no conviertas un ampersand dos veces seguidas.
Salida con nombre o numérica
Las referencias numéricas funcionan en XML, en feeds y en SVG, donde casi ninguna entidad con nombre existe.
Decodificación segura de ida y vuelta
Se reconocen las formas con nombre y numérica, incluida la escritura hexadecimal y las entidades sin punto y coma.
Honesto sobre lo que hace escapar
Hace un texto seguro de colocar en un contexto, algo más modesto que hacer seguro un marcado no fiable.
Nada sale del navegador
El texto se convierte en esta página, así que los tiques y nombres de cliente con los que pruebas siguen siendo tuyos.
No existe un único «escapar para HTML»: decide el contexto
Esta es la idea que hace comprensible todo lo demás. Un navegador analiza un documento en varios estados distintos, y los caracteres capaces de terminar el estado actual son diferentes en cada uno. Dentro del texto, solo `<` y `&` pueden empezar algo nuevo, así que son los dos que hay que escapar. Dentro de un valor de atributo entre comillas dobles, `<` es inofensivo y `"` es fatal, porque la comilla termina el atributo. Dentro de un valor de atributo sin comillas, lo termina un espacio, y también un tabulador, un salto de línea, una tilde invertida, un signo igual y un corchete angular de cierre. Dentro de un bloque `<script>`, escapar HTML no sirve absolutamente de nada y lo que hace falta es escapar cadenas de JavaScript. Por eso una única función `escape()` aplicada en todas partes produce a la vez salidas rotas y vulnerabilidades reales: escapa de más donde los caracteres eran seguros y de menos donde no lo eran. Elegir un contexto antes de codificar no es un detalle fino: es la decisión entera.
Solo un puñado de caracteres tiene que cambiar
Vale la pena saber lo corta que es la lista, porque casi todo el exceso de escapado viene de no saberlo. Los caracteres con significado sintáctico en HTML son `<`, `>`, `&`, `"` y el apóstrofo. De ellos, `&` siempre necesita escaparse porque empieza una entidad, y `<` siempre porque empieza una etiqueta. `>` es cortesía más que requisito dentro del texto —un navegador muestra un `>` suelto sin problema—, aunque escaparlo es costumbre en la mayoría de bases de código porque no cuesta nada y ayuda si el marcado lo procesa después algo más estricto. Las dos comillas importan solo dentro de valores de atributo, y solo la que usaste como delimitador. Todo lo demás, incluida cada letra acentuada, cada carácter árabe o chino y cada emoji, no necesita escaparse en absoluto en un documento UTF-8: la codificación ya se encarga. Convertir `café` en `café` es legal y casi siempre inútil, y hace tu archivo más grande y más difícil de buscar.
La eñe, los acentos y el hábito de escapar lo que no hace falta
Hay un patrón que aparece en proyectos en español más que en otros y conviene nombrarlo. Muchos sistemas antiguos —gestores de contenido, exportadores, plantillas de correo escritas cuando ISO-8859-1 era el valor por defecto— convertían ñ, á, é, í, ó, ú y ü en entidades con nombre, de modo que «Año» acababa escrito `Año` en la base de datos. Tenía sentido cuando no podías confiar en que la cabecera de codificación llegara intacta. Hoy es pérdida neta y por razones concretas: la búsqueda deja de funcionar, porque quien escribe «año» en el buscador no encuentra `Año`; la ordenación alfabética se rompe, porque se ordena por la `&` y no por la letra; el recuento de caracteres de un campo con límite miente, porque una letra ocupa ocho; y un lector de pantalla no puede pronunciar lo que aún no se ha decodificado. Hay además una trampa clásica en español: `ñ` sin punto y coma final se decodifica igual en HTML por compatibilidad, pero en XML es un error fatal, así que la misma cadena sobrevive en la web y revienta el feed. La solución correcta es declarar `<meta charset="utf-8">` y escribir las letras tal cual. Aquí la codificación completa existe como opción para cuando un sistema heredado te obliga, no como comportamiento por defecto.
La doble codificación es el fallo que esta herramienta existe para evitar
Escapar no es idempotente, y olvidarlo produce uno de los defectos más reconocibles de la web. Codifica `&` una vez y obtienes `&`. Codifica el resultado otra vez y obtienes `&amp;`, que se muestra en la página como el texto literal `&`. Lo has visto: títulos de página que dicen «Tom & Jerry», asuntos de correo con `'` en mitad de una palabra, nombres de producto rodeados de `"` en los resultados de búsqueda. Ocurre porque el escapado se aplicó en dos capas que no se conocían: un motor de plantillas que escapa automáticamente, más un controlador que escapó por precaución antes de entregar la cadena. El arreglo es no escapar nunca dos veces, y la manera de asegurarlo es escapar exactamente una vez, en el último momento posible, en el punto en que la cadena entra en el marcado. Todo lo que se guarde ya escapado en una base de datos acabará escapado otra vez por lo que lo muestre.
Las entidades con nombre son una función de HTML, no del texto
HTML5 define más de dos mil entidades con nombre, desde los familiares ` ` y `©` hasta cosas como `⨂`. XML define exactamente cinco: `<`, `>`, `&`, `"` y `'`. Esa brecha provoca un fallo concreto y frecuente. Mete ` ` en un feed RSS, un archivo SVG, un documento XHTML, un diseño de Android o una carga SOAP y obtienes un error de análisis, porque el analizador nunca ha oído hablar de ella y una entidad no definida es fatal en XML en vez de simplemente ignorarse. La forma numérica ` ` funciona en todas partes, porque no necesita definición. Hay una trampa simétrica: `'` es una de las cinco de XML pero no existía en HTML4, así que documentos HTML antiguos y algunos clientes de correo la muestran como texto literal. Si una cadena puede viajar entre formatos —y en una pila moderna casi todas lo hacen—, las referencias numéricas son la grafía segura.
Escapar no es sanear, y la diferencia importa
Estos dos se confunden constantemente, y en esa confusión viven los fallos de inyección. Escapar toma un texto y lo hace seguro de colocar en un contexto concreto, para que se muestre en lugar de interpretarse. Sanear toma marcado que debe seguir siendo marcado y le quita las partes peligrosas. Escapar un comentario antes de imprimirlo es correcto; escapar un campo de texto enriquecido que el usuario tiene permiso para formatear destruye el formato, y la respuesta habitual —dejar pasar el HTML sin escapar— es lo que de verdad abre el agujero. El ejemplo más afilado de la diferencia es una URL: codifica un enlace con entidades y `javascript:alert(1)` sobrevive completamente intacto, porque la decodificación de entidades ocurre antes de comprobar el esquema, así que `javascript:` vuelve a ser `javascript:` y se ejecuta. Ninguna cantidad de escapado HTML protege un `href`; solo validar el esquema lo hace. Escapar resuelve exactamente un problema, y saber cuál es la clave.
Errores comunes que conviene evitar
- Usar una sola función de escapado en todas partes. Texto, valores de atributo y bloques de script terminan en caracteres distintos, así que una única función escapa de más en un sitio y de menos en otro.
- Escapar la misma cadena dos veces. Escapar no es idempotente: `&` pasa a `&` y luego a `&amp;`, y por eso hay títulos que dicen «Tom & Jerry».
- Guardar ñ y acentos como entidades en la base de datos. Rompe la búsqueda y la ordenación; la solución es `<meta charset="utf-8">` y escribir las letras tal cual.
- Meter entidades con nombre en XML. Allí solo hay cinco definidas, así que ` ` es un error fatal en un feed, un SVG o un XHTML, mientras que ` ` funciona en todas partes.
- Confiar en que codificar entidades hace segura una URL. Las entidades se decodifican antes de comprobar el esquema, así que `javascript:` vuelve a ser `javascript:` y se ejecuta.
Comparativa
| Aspecto | Esta herramienta | Codificadores online | Una biblioteca del lenguaje |
|---|---|---|---|
| Texto enviado a un servidor | Nunca | Normalmente sí | No |
| Te deja elegir el contexto | Sí | Rara vez | Normalmente |
| Avisa de la doble codificación | Sí | No | No |
| Salida numérica para XML | Sí | A veces | Configurable |
| Decodifica todo el conjunto HTML5 | Sí | Parcialmente | Normalmente |
| Precio | Gratis | Gratis / planes de pago | Gratis |
Características
Codificar y decodificar
Ambas direcciones, para revisar lo que produjo un sistema con la misma facilidad con que preparas lo que envías.
Codificación mínima o completa
Escapa solo los caracteres que exige el contexto, o todo carácter no ASCII, según a dónde vaya el texto.
Soporte de entidades con nombre
Al decodificar se reconoce todo el conjunto con nombre de HTML5, incluida la larga cola que nadie escribe a mano.
Hexadecimal y decimal
Las referencias numéricas se leen y se escriben en ambas grafías, porque los documentos reales llevan las dos.
Detección de doble codificación
Las entidades ya presentes en la entrada se resaltan antes de que las codifiques por segunda vez.
Entradas grandes admitidas
Una plantilla entera o una exportación larga se convierte sin subida ni tope de tamaño.
Nada que instalar
Sin herramienta de compilación, sin entorno de ejecución, sin dependencias: funciona en la página web.
Listo para árabe y RTL
Interfaz completa en ocho idiomas, incluido el árabe de derecha a izquierda.
Seguro por defecto
Servido por HTTPS, sin rastreo de contenido ni subida a terceros.
Quién la usa
Desarrolladores web
Comprobar cómo se comportará una cadena una vez dentro de un valor de atributo.
Desarrolladores de email
Preparar asuntos y cuerpos de mensaje para clientes que analizan de forma estricta.
Redactores técnicos
Mostrar ejemplos de código en una página sin que el navegador intente ejecutarlos.
Quien depura texto corrupto
Decodificar una cadena que llegó con `&amp;` en mitad de ella.
Preguntas Frecuentes
No. Todo se ejecuta localmente en tu navegador — tu texto nunca se sube, guarda ni comparte.
Sí — totalmente gratis, sin cuenta y sin límites.