HTML Escape is the process of converting special HTML characters (like <, >, &, ") into HTML entities (like <, >, &, ").
Unescape is the reverse process, converting HTML entities back to their original characters.
Why Do We Need HTML Escaping?
- Prevent XSS (Cross-Site Scripting): Escaping is the first line of defense against XSS attacks. It prevents malicious HTML/JavaScript injection and is essential when displaying user-generated content.
- Display HTML Code as Text: Show HTML examples in documentation, render code snippets on web pages, or debug template engines.
- Data Serialization: Safely embed HTML in JSON/XML, prepare content for API responses, or store HTML in databases.
- Email & Header Safety: Escape special characters in email subjects, prepare data for HTTP headers, or handle form data correctly.
Entity Format Comparison
| Character | Named Entity | Decimal Entity | Hex Entity |
|---|---|---|---|
| < | < | < | < |
| > | > | > | > |
| & | & | & | & |
| " | " | " | " |
| ' | ' | ' | ' |
Code Examples
JavaScript (Browser)
// Escape HTML
function escapeHtml(text) {
const map = {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": '''
};
return text.replace(/[&<>"']/g, m => map[m]);
}
// Unescape HTML
function unescapeHtml(html) {
const doc = new DOMParser().parseFromString(html, 'text/html');
return doc.documentElement.textContent;
}
// Usage
const escaped = escapeHtml('<script>alert("XSS")</script>');
console.log(escaped);
// <script>alert("XSS")</script>Node.js (using 'he' library)
const he = require('he');
// Encode
const encoded = he.encode('<div class="test">Hello & goodbye</div>');
console.log(encoded);
// <div class="test">Hello & goodbye</div>
// Decode
const decoded = he.decode('<div>Hello</div>');
console.log(decoded); // <div>Hello</div>
// Different formats
he.encode('<tag>', { useNamedReferences: true }); // <tag>
he.encode('<tag>', { decimal: true }); // <tag>
he.encode('<tag>', { hexadecimal: true }); // <tag>Python
import html
# Escape
escaped = html.escape('<script>alert("XSS")</script>')
print(escaped)
# <script>alert("XSS")</script>
# Unescape
unescaped = html.unescape('<div>Hello</div>')
print(unescaped) # <div>Hello</div>Security Best Practices
⚠️ Important Security Notes:
- Escaping is NOT Enough: Combine with Content Security Policy (CSP) and backend validation.
- Context Matters: Use appropriate escaping for HTML content, JavaScript strings, URLs, and SQL.
- Don't Trust User Input: Always validate and sanitize on both client and server side.
- Use Framework Built-ins: React, Vue, and Angular escape by default—leverage these features.
Common Use Cases
- XSS Prevention: Escape user input before displaying:
<script>alert('XSS')</script>→<script>alert('XSS')</script> - Displaying Code: Show HTML code examples on web pages by escaping tags.
- JSON with HTML: Prepare HTML fragments for JSON serialization.
- Email Content: Escape special characters in email subjects and headers.
- Template Debugging: Unescape rendered template output to see actual HTML.
El escape de HTML es fundamental para la seguridad web y la visualización de datos. Creé esta herramienta después de lidiar con innumerables vulnerabilidades XSS durante auditorías de seguridad y necesitar mostrar contenido generado por usuarios de forma segura. Ya sea que esté sanitizando entradas de formularios, depurando motores de plantillas, preparando datos para serialización JSON/XML, o enseñando conceptos de seguridad web, la codificación adecuada de entidades HTML es esencial. La herramienta admite tres formatos de entidades: entidades nombradas (<, >), entidades decimales (<, >) y entidades hexadecimales (<, >)—cada una útil en diferentes contextos. Todo el procesamiento ocurre en el lado del cliente en su navegador, lo que hace seguro manejar contenido sensible sin enviar datos a ningún servidor.
How to Use
Para escapar: pegue su HTML o texto que contenga caracteres especiales en el panel de entrada. La herramienta convierte automáticamente caracteres como <, >, &, \", y ' a sus equivalentes de entidades HTML en tiempo real. Elija su formato de entidad preferido: Nombradas (más legible, ej. &), Decimal (ampliamente compatible, ej. &), o Hexadecimal (compacto, ej. &). Active 'Mantener saltos de línea' para preservar o eliminar saltos de línea. Para desescapar: pegue HTML con entidades y la herramienta las decodificará a caracteres originales. La opción 'Codificar todos los caracteres' escapa incluso caracteres no especiales, útil para máxima compatibilidad en casos extremos.
Common Use Cases
Prevención XSS
Escape la entrada del usuario antes de mostrarla: '<script>alert(XSS)</script>' se convierte en '<script>alert(XSS)</script>'.
Depuración de plantillas
Desescape la salida de plantilla renderizada para ver el HTML realmente generado.
Escape de cadenas JSON
Prepare fragmentos HTML para serialización JSON escapando comillas y caracteres especiales.
Mostrar código
Muestre ejemplos de código HTML en páginas web escapando etiquetas para que aparezcan como texto.
HTML de correo
Escape caracteres especiales en líneas de asunto o encabezados de correo.
Almacenamiento en base de datos
Escape HTML antes de almacenar en campos de texto para evitar problemas de renderizado.
Limitations & Important Notes
Esta herramienta maneja entidades HTML definidas en la especificación HTML5. NO elimina ni sanitiza atributos HTML potencialmente peligrosos (como onclick, onerror) o código JavaScript—solo escapa representaciones de caracteres. Para una verdadera prevención XSS, combine el escape con Content Security Policy (CSP) y validación de entrada. La herramienta asume codificación UTF-8; otras codificaciones pueden producir resultados inesperados. Para documentos muy grandes (>5MB), los límites de memoria del navegador pueden causar ralentizaciones. La codificación de entidades aumenta el tamaño del texto; no es ideal para escenarios con ancho de banda limitado.