Codificador / Decodificador de entidades HTML/ & < > "

Codifica caracteres especiales HTML a entidades y decodifica entidades con nombre/numericas — esencial para la prevencion de XSS.

Texto plano / HTML
0 caracteres
Entidades HTML
0 caracteres
Entidades HTML comunes
&&
<&lt;
>&gt;
"&quot;
'&#39;
©&copy;
®&reg;
&trade;
&nbsp;
&mdash;
&hellip;
«»&laquo;&raquo;

¿Esta herramienta resolvió tu problema?

Qué es una herramienta de codificación/descodificación HTML

Una herramienta de codificación/descodificación HTML convierte entre texto plano y entidades HTML. Las entités HTML son códigos especiales que comienzan con & y terminan con ; para mostrar de forma segura caracteres especiales.

Casos de uso comunes

Mostrar fragmentos de código: codificar < y > como &lt; y &gt;. Prevenir ataques XSS: codificar la entrada del usuario antes de mostrarla. Plantillas de email: mostrar caracteres especiales de forma segura.

Ejemplos de codigo

JavaScript (Browser)
// Encode using a temporary DOM element (browser only)
function htmlEncode(str) {
  const div = document.createElement('div');
  div.appendChild(document.createTextNode(str));
  return div.innerHTML;
}

// Decode
function htmlDecode(str) {
  const div = document.createElement('div');
  div.innerHTML = str;
  return div.textContent ?? div.innerText;
}

// Manual encode (works in Node.js too)
const escapeHtml = (s) => s
  .replace(/&/g, '&amp;')
  .replace(/</g, '&lt;')
  .replace(/>/g, '&gt;')
  .replace(/"/g, '&quot;')
  .replace(/'/g, '&#39;');
Python
import html

# Encode (escape)
html.escape('<script>alert("xss")</script>')
# '&lt;script&gt;alert(&quot;xss&quot;)&lt;/script&gt;'

# Encode including single quotes
html.escape("it's", quote=True)
# 'it&#x27;s'

# Decode (unescape)
html.unescape('&lt;b&gt;Hello &amp; World&lt;/b&gt;')
# '<b>Hello & World</b>'
Go
import "html"

// Encode
html.EscapeString("<script>alert('xss')</script>")
// "&lt;script&gt;alert(&#39;xss&#39;)&lt;/script&gt;"

// Decode
html.UnescapeString("&lt;b&gt;Hello &amp; World&lt;/b&gt;")
// "<b>Hello & World</b>"

// In templates (auto-escaped)
import "html/template"
t := template.Must(template.New("").Parse(
    "<p>{{.}}</p>"))
t.Execute(os.Stdout, "<b>Hello</b>")
// <p>&lt;b&gt;Hello&lt;/b&gt;</p>
PHP / Twig
<?php
// Encode
htmlspecialchars('<b>Hello</b> & "World"', ENT_QUOTES, 'UTF-8');
// '&lt;b&gt;Hello&lt;/b&gt; &amp; &quot;World&quot;'

// Decode
htmlspecialchars_decode('&lt;b&gt;Hello&lt;/b&gt;');
// '<b>Hello</b>'

// All HTML entities (including named ones)
htmlentities('© 2025 — Café', ENT_QUOTES, 'UTF-8');
// '&copy; 2025 &mdash; Caf&eacute;'

// Twig (auto-escaped by default)
// {{ user_input }}        ← auto-escaped
// {{ user_input|raw }}    ← raw HTML (unsafe!)

Preguntas frecuentes

¿Por que necesitamos la codificacion de entidades HTML?
Ciertos caracteres tienen un significado especial en HTML: < y > para etiquetas, & para entidades, " para valores de atributos. Insertar entradas de usuario sin procesar en HTML permite al navegador interpretarlas como estructura HTML, creando vulnerabilidades XSS (cross-site scripting). Escaparlos a &lt;, &gt;, &amp;, &quot; hace que el navegador los muestre como texto en lugar de ejecutar codigo.
¿Cual es la diferencia entre entidades HTML con nombre y numericas?
Las entidades con nombre usan nombres faciles de recordar: &amp; (&), &copy; (©), &nbsp; (espacio de no separacion). Las entidades numericas usan el punto de codigo Unicode: decimal &#169; o hexadecimal &#xA9; (ambos significan ©). Las entidades con nombre solo existen para caracteres definidos en la especificacion HTML; las entidades numericas pueden representar cualquier caracter Unicode.
¿Cuales son los 5 caracteres mas importantes para codificar en HTML?
Los 5 esenciales: & → &amp; (debe ir primero, o rompera otras entidades), < → &lt;, > → &gt;, " → &quot; (dentro de valores de atributos), ' → &#39; o &apos; (dentro de valores de atributos). Otros caracteres (CJK, ©, € etc.) no necesitan codificacion — los navegadores modernos soportan UTF-8 completamente.
¿Que es &nbsp; y cuando debo usarlo?
&nbsp; es un espacio de no separacion (U+00A0). A diferencia de los espacios normales: 1) El navegador no cortara la linea en un &nbsp;. 2) Multiples &nbsp; no se colapsan en uno solo (HTML normalmente colapsa espacios consecutivos). Uselo para espaciado fijo — por ejemplo entre un numero y una unidad '100&nbsp;km', o para evitar que una frase se corte entre lineas.
¿React y Vue codifican automaticamente el contenido HTML?
Si. React JSX y las plantillas de Vue escapan todos los valores interpolados por defecto. En React, <div>{userInput}</div> codifica automaticamente los caracteres especiales — solo dangerouslySetInnerHTML lo omite (usar con extrema precaucion). En Vue, {{ userInput }} se escapa automaticamente; solo la directiva v-html inserta HTML sin procesar.
¿Cual es la diferencia entre codificacion HTML y codificacion URL?
La codificacion de entidades HTML (&amp;, &lt;, etc.) escapa caracteres especiales en el contexto de un documento HTML para evitar ambiguedades en el analisis HTML. La codificacion URL (%26, %3C, etc.) escapa caracteres no ASCII y reservados en el contexto URL/URI. Sirven para propositos diferentes. Para un atributo href: primero codificar la URL del valor, luego codificar todo el atributo en entidades HTML.