Herramienta de escape / desescape HTML
Escapar HTML convierte caracteres como <, > y & en entidades HTML seguras. Luego los navegadores los muestran como texto visible en lugar de interpretarlos como marcado. Los desarrolladores se encuentran con tareas de escape y desescape HTML constantemente: al renderizar comentarios, incrustar fragmentos de código o decodificar HTML extraído. Omitir este paso, o usar una herramienta inadecuada, puede romper el diseño de la página o dejar el marcado mal formado.
Este codificador y decodificador gratuito de entidades HTML funciona completamente en tu navegador. No hay subidas al servidor, ni registro, ni datos que salgan de tu dispositivo. Cambia entre escapar y desescapar al instante, elige salida con nombre o numérica y obtén resultados limpios y correctamente ordenados cada vez. Tanto si estás saneando un campo de comentarios como si estás decodificando una respuesta de API, esta herramienta de escape HTML acierta a la primera.
Herramienta de escape / desescape HTML
Convierte texto sin formato en entidades HTML seguras o vuelve a texto legible.
¿Qué es el escape HTML (y el desescape)?
Escapar HTML sustituye caracteres con significado especial en HTML por sus entidades equivalentes. Los principales son <, >, &, " y '. Sin escape, un < o & suelto puede romper el diseño o tratarse como marcado real.
Desescapar HTML invierte el proceso y devuelve las entidades a sus caracteres originales. < vuelve a < y & vuelve a &. Esto suele ser útil al leer contenido procedente de una API, un RSS o una exportación de CMS.
A veces se escribe como HTML escape / unescape como una sola operación combinada. Tanto si lo llamas codificación/decodificación de entidades como escape y desescape, esta herramienta cubre ambos sentidos.
Cómo funciona el escape HTML
El escape HTML funciona carácter por carácter, no byte por byte como las codificaciones binarias. Cada carácter reservado se convierte en una entidad HTML concreta, con nombre como & o numérica como &.
Las entidades con nombre son más fáciles de leer. Las numéricas sirven para cualquier carácter, incluso si no tiene nombre definido. El orden también importa: & debe escaparse primero para evitar dobles codificaciones.
Aquí tienes un recorrido real con la cadena 5 < 10 & true. Cada carácter reservado se sustituye en una pasada de izquierda a derecha, y el resto del texto permanece igual.
Carácter reservado encontrado | Posición en la cadena | Entidad HTML |
|---|---|---|
| < | después de `5 ` | < |
| & | después de `10 ` | & |
Resultado:5 < 10 & true→5 < 10 & true
Cómo usar esta herramienta de escape / desescape HTML
¿Necesitas escapar HTML online sin instalar nada? El flujo aquí es simple: elige el modo, pega la entrada, selecciona el formato de salida para el escape y copia el resultado. Todo se procesa localmente en tu navegador.
La salida escapada conserva tu texto original y añade solo las entidades seguras necesarias. Volver a texto plano es igual de directo: pega, pulsa Desescapar y copia. Si el resultado no cambia, tu entrada no contenía caracteres que escaparse.
- Elige Escapar para codificar texto sin formato, o Desescapar para convertir entidades HTML de vuelta a texto.
- Pega tu texto o fragmento HTML en el cuadro de entrada.
- En modo Escapar, selecciona Entidades con nombre como
&o Entidades numéricas como&. - Haz clic en Escapar HTML o Desescapar HTML y el resultado aparecerá al instante.
- Usa Copiar salida para llevarte el resultado o Intercambiar entrada/salida para invertir la operación.
Ejemplos prácticos
Una sola palabra no muestra bien cómo se comportan el escape y el desescape HTML con contenido real. La siguiente tabla recorre cinco casos comunes, desde una frase simple hasta un fragmento HTML completo.
Fíjate en el ejemplo de comparación: escapa < y & en la misma pasada y en el orden correcto. Escapar & primero evita que < y > se conviertan por error en &lt; y &gt;.
Escenario | Entrada | Salida |
|---|---|---|
| Frase simple con ampersand | `Tom & Jerry` | `Tom & Jerry` |
| Fragmento HTML | `<div class="card">Hi</div>` | `<div class="card">Hi</div>` |
| Valor de atributo con apóstrofe | `Jenny's "Big" Sale` | `Jenny's "Big" Sale` |
| Texto de comparación | `5 < 10 && 10 > 5` | `5 < 10 && 10 > 5` |
| Ejemplo de desescape | `Tom & Jerry's "Big" Sale` | `Tom & Jerry's "Big" Sale` |
Referencia de entidades HTML comunes
Solo cinco caracteres necesitan escape en la mayoría de contextos HTML, aunque conviene conocer algunos más. La tabla cubre el conjunto común: todo lo que esta herramienta escapa por defecto, más algunos símbolos tipográficos útiles.
Las entidades con nombre como © son más fáciles de leer en el código fuente. Las numéricas como © funcionan incluso cuando un carácter no tiene un nombre definido.
También existe la forma hexadecimal: & representa el mismo ampersand que &. La opción numérica de esta herramienta genera decimal por defecto, pero Desescapar también entiende referencias hexadecimales.
Además de los cinco caracteres reservados, HTML define entidades con nombre para letras acentuadas y símbolos, como é y ñ. Son útiles cuando no puedes garantizar UTF-8 en el sistema de destino.
Los usuarios también describen estos caracteres de formas distintas: escape HTML de comillas, apóstrofe, ampersand, menor que o mayor que. Las reglas de entidades son las mismas.
Carácter | Nombre | Entidad con nombre | Entidad numérica | Nota |
|---|---|---|---|---|
| & | Ampersand | & | & | Debe escaparse primero para evitar dobles codificaciones posteriores. |
| < | Signo menor que | < | < | Evita que el navegador lo interprete como inicio de una etiqueta. |
| > | Signo mayor que | > | > | Suele escaparse por simetría, aunque no siempre es obligatorio. |
| " | Comillas dobles | " | " | Necesarias dentro de un atributo HTML entre comillas dobles. |
| ' | Apóstrofe | ' | ' | ' es válido en HTML5, pero ' funciona en todas partes. |
| Espacio no separable | |   | Aparece con frecuencia en contenido pegado desde editores ricos. | |
| © | Símbolo de copyright | © | © | Es un símbolo tipográfico, no un carácter reservado. |
| - | Raya larga | — | — | Suele alterarse al copiar y pegar desde procesadores de texto. |
Dónde no se aplica el escape HTML
El escape HTML solo funciona donde el navegador está analizando contenido de texto HTML. Dos puntos comunes rompen esa suposición: los elementos <script>/<style> y los atributos HTML que realmente contienen JavaScript o CSS.
Dentro de las etiquetas <script> y <style>, el navegador no analiza entidades en absoluto, trata el contenido como JavaScript o CSS sin procesar. Escapar & dentro de un bloque <script> no protege nada; solo imprime un & literal en tu código, lo que normalmente es incorrecto. Los valores dinámicos necesitan un escape adecuado de cadenas JS o CSS, no entidades HTML.
Lo mismo se aplica a atributos como onclick y style. <p onclick="NOT-HERE"> y <p style="NOT-HERE"> contienen JavaScript y CSS, respectivamente. Escapar HTML por sí solo no hace seguro el contenido no confiable dentro de ellos. Ajusta el escape al contexto real, no solo a que "está dentro de una etiqueta HTML".
Escapar HTML en código: JavaScript, Python y PHP
Muchos desarrolladores no necesitan solo una conversión puntual, sino la misma lógica dentro de su propia aplicación. Los ejemplos siguientes cubren tres lenguajes comunes para escapar y desescapar HTML.
En JavaScript no existe una función integrada única para escapar HTML, así que el enfoque con textContent es la opción más segura en el navegador para mostrar texto. En servidor, usa una librería específica de escape HTML, no una función para URIs o cadenas JavaScript.
Python y PHP lo ponen más fácil porque ambos incluyen funciones dedicadas en sus herramientas estándar. No necesitas instalar nada extra.
JavaScript (navegador)
// Escape (safe display)
const el = document.createElement("div");
el.textContent = "Tom & Jerry";
const escaped = el.innerHTML;
console.log(escaped); // Tom & Jerry
// Unescape
const parser = new DOMParser();
const decoded = parser.parseFromString(escaped, "text/html").body.textContent;
console.log(decoded); // Tom & JerryPython
import html
escaped = html.escape("Tom & Jerry")
print(escaped) # Tom & Jerry
decoded = html.unescape(escaped)
print(decoded) # Tom & JerryPHP
<?php
$escaped = htmlspecialchars("Tom & Jerry");
echo $escaped; // Tom & Jerry
$decoded = htmlspecialchars_decode($escaped);
echo $decoded; // Tom & Jerry¿Escapar HTML evita XSS? (Seguridad y privacidad)
Escapar HTML reduce el riesgo de XSS, pero no es una protección completa por sí sola. Escapar hace que el texto del usuario se renderice como caracteres visibles en lugar de marcado, algo realmente útil y necesario. La protección completa necesita escape según el contexto: el cuerpo HTML, los atributos, JavaScript y las URL tienen cada uno sus propias reglas.
En cuanto a privacidad, esta herramienta funciona completamente del lado del cliente en tu navegador. El texto y el HTML que pegas nunca se suben a un servidor. Cadenas sensibles, borradores de comentarios, plantillas internas y respuestas de API que estás depurando, permanecen en tu dispositivo todo el tiempo.
Trata esta herramienta como una forma de escapar o decodificar entidades HTML correctamente para mostrarlas, no como un control de seguridad independiente. Sanitiza cualquier HTML que permitas intencionadamente, texto enriquecido o salida Markdown, con una librería especializada. Valida también la entrada no confiable en el servidor, no solo al mostrarla. Para el contexto de URL, nuestro Codificador/decodificador URL gestiona el percent-encoding de cadenas de consulta y rutas.
Errores comunes de escape HTML y cómo corregirlos
La mayoría de errores de escape o desescape HTML se reducen a unos pocos patrones. Reconocerlos evita revisar todo el texto desde cero.
Si el texto sigue pareciendo doblemente escapado después de un pase de Desescapar, repítelo una vez más. Normalmente significa que se codificó dos veces en algún punto anterior.
Error | Causa | Solución |
|---|---|---|
| El texto muestra `&lt;` en lugar de `<` | La entrada se escapó dos veces: una en tu código y otra por el autoescape de una plantilla. | Desescapa una vez para quitar una capa y comprueba si aún sigue codificado. |
| Las comillas rompen un atributo HTML | " o ' dentro del valor del atributo no se escaparon como `"` o `'`. | Escapa las comillas antes de insertar texto en cualquier atributo. |
| & aparece literal en lugar de `&` | & no se escapó primero y chocó con entidades generadas después. | Escapa siempre & antes que <, >, ", y '. |
| Desescapar no cambia las entidades | La entrada mezcla entidades con nombre y numéricas, o usa referencias hexadecimales como `&`. | Usa un decodificador que entienda entidades con nombre, decimales y hexadecimales. |
Escape HTML frente a otras codificaciones
El escape HTML no es el único sistema para tratar texto de forma segura. La mejor opción depende del destino del contenido. La tabla siguiente compara el escape HTML con las codificaciones con las que más se suele confundir.
Usar la codificación equivocada deja el problema original sin resolver. Los caracteres de escape HTML no protegerán una URL, y el percent-encoding tampoco protegerá el texto del cuerpo HTML. Para cadenas de consulta, nuestro Codificador/decodificador URL aplica percent-encoding correctamente. Para datos binarios como archivos e imágenes, nuestro Codificador/decodificador Base64 cubre la codificación y decodificación Base64. Para literales de cadena dentro de JavaScript, una herramienta de escape de cadenas JavaScript aplica las secuencias de escape correctas.
Codificación | Caracteres reservados | Mejor uso |
|---|---|---|
| Escape HTML | <, >, &, ", ' | Texto en el cuerpo HTML y valores de atributos |
| Codificación URL | Caracteres reservados de URL (secuencias %XX) | Query strings, rutas y datos de formularios |
| Escape de cadenas JavaScript | \n, \", \\, escapes unicode | Texto dentro de un literal de cadena JS |
| Codificación Base64 | Binario completo a un alfabeto de 64 caracteres | Datos binarios en sistemas solo de texto |
Preguntas frecuentes
Preguntas frecuentes