Codificar / decodificar entidades HTML

Escapa texto para HTML y convierte las entidades de nuevo en texto.

Acerca de esta herramienta

Escapa <, >, &, las comillas y, si quieres, todos los caracteres no ASCII para que el texto se pueda insertar de forma segura en HTML, o decodifica entidades con nombre y numéricas como &amp;, &eacute; y &#x1F680; de vuelta a texto plano.

Cómo se usa

  1. Elige Codificar para escapar texto para HTML, o Decodificar para convertir las entidades de nuevo en caracteres.
  2. Pega tu texto.
  3. Si quieres, codifica todos los caracteres no ASCII como entidades numéricas.
  4. Copia el resultado.

Preguntas

¿Qué caracteres hay que escapar en HTML?
& y < siempre; > por seguridad; y " o ' dentro de los valores de atributo. Escapar estos cinco basta para mostrar texto del usuario de forma segura en HTML.
¿Escapar protege contra XSS?
Escapar la salida según el contexto es la defensa principal para el texto y los atributos HTML. No basta dentro de etiquetas script, atributos de manejadores de eventos ni URL, que necesitan su propia codificación.
¿Tengo que codificar las letras con tilde?
No si tu página se sirve como UTF-8, como casi todas las páginas modernas. Codificar todo lo que no sea ASCII solo es útil para sistemas que no admiten UTF-8.
¿Qué diferencia hay entre &nbsp; y un espacio normal?
&nbsp; es un espacio de no separación, U+00A0. El navegador no corta una línea en él ni junta varios en uno, a diferencia de los espacios normales. Úsalo para mantener juntos valores como “10 km”. Para la maquetación y el espaciado, usa CSS en lugar de cadenas de &nbsp;.
¿Debo usar &apos; o &#39; para un apóstrofo?
Ambos funcionan en HTML5 y XML, pero &apos; no formaba parte de HTML 4, así que los parsers antiguos y algunos clientes de correo no lo reconocen. &#39; funciona en todas partes, por eso lo usa este codificador. Dentro de un atributo entre comillas dobles no hace falta escapar el apóstrofo.
¿Qué diferencia hay entre escapar HTML y codificar una URL?
Escapar HTML hace que el texto sea seguro dentro de HTML; codificar una URL hace que el texto sea seguro dentro de una URL. Un enlace en un atributo href necesita ambas cosas: primero codifica con porcentajes cada valor de la consulta y luego escapa para HTML la URL completa, de modo que cada & entre parámetros se convierta en &amp;. La herramienta de URL se encarga del paso de la codificación porcentual.

¿Qué son las entidades HTML?

Una entidad HTML es un fragmento corto de texto que representa un carácter. Empieza por & y termina con un punto y coma. Las entidades con nombre usan una palabra, como &amp; para & o &copy; para ©. Las entidades numéricas usan el punto de código Unicode, ya sea en decimal, como &#169;, o en hexadecimal, como &#xA9;. El navegador las sustituye por el carácter real al renderizar la página, así que el marcado en sí puede seguir siendo ASCII simple.

Las entidades resuelven dos problemas. Primero, te permiten mostrar caracteres que HTML interpretaría como marcado: un < literal abre una etiqueta y un & suelto inicia una entidad. Segundo, te permiten escribir caracteres que tu teclado o la codificación de tu archivo no pueden manejar. HTML5 define más de 2000 entidades con nombre, y cualquier carácter Unicode, incluidos emoji como &#x1F680; para 🚀, se puede escribir como entidad numérica.

Cómo escapar HTML en JavaScript

En el navegador, la forma más segura de mostrar texto del usuario es no construir cadenas HTML en absoluto. Asigna element.textContent en lugar de innerHTML y el navegador tratará el valor como texto. React, Vue, Svelte y Angular también escapan por defecto los valores interpolados. El riesgo vuelve en cuanto usas innerHTML, dangerouslySetInnerHTML o v-html con datos que no controlas, que es donde empiezan la mayoría de los fallos XSS en las aplicaciones modernas.

Cuando sí necesitas una cadena escapada, para una plantilla o el cuerpo de un correo, sustituye los cinco caracteres especiales: primero el ampersand y luego <, >, las comillas dobles y la comilla simple. Escapar & primero es importante; si no, &lt; se convierte en &amp;lt;. Eso es lo que hace esta herramienta de escape HTML en el modo Codificar, que escribe la comilla simple como &#39;. Usa Decodificar para comprobar qué contiene realmente una cadena de una base de datos o una API.

¿Por qué veo &amp;amp; en mi página? Cómo solucionar el doble escape

Si una página muestra &amp; o &quot; como texto literal, la cadena se escapó dos veces. Normalmente el valor se escapó antes de guardarlo y la plantilla lo volvió a escapar al mostrarlo. La primera pasada convierte & en &amp;, la segunda lo convierte en &amp;amp; y el navegador lo muestra como &amp;. Lo mismo ocurre con feeds RSS, campos de un CMS y API JSON que escapan el HTML por ti.

La solución es escapar una sola vez, en el momento de escribir en HTML, y guardar texto sin escapar en todo lo demás. Para limpiar datos existentes, pégalos en el modo Decodificar: cada pasada elimina una capa, así que vuelve a ejecutarlo si quedan entidades. La decodificación usa el parser del navegador sobre un elemento textarea, que lee las entidades sin ejecutar etiquetas ni scripts. Para comparar las versiones de antes y después, usa Diff de textos.

Entidades HTML habituales

Caracteres que hay que escapar en HTML y los tipográficos que más se buscan.

CarácterEntidad con nombreEntidad numérica
&&amp;&#38;
<&lt;&#60;
>&gt;&#62;
"&quot;&#34;
'&apos;&#39;
espacio de no separación&nbsp;&#160;
©&copy;&#169;
®&reg;&#174;
™&trade;&#8482;
€&euro;&#8364;
£&pound;&#163;
°&deg;&#176;
×&times;&#215;
÷&divide;&#247;
–&ndash;&#8211;
—&mdash;&#8212;
…&hellip;&#8230;
«&laquo;&#171;
»&raquo;&#187;
→&rarr;&#8594;
←&larr;&#8592;
✓&check;&#10003;

¿Algo no funciona o un resultado parece incorrecto? Informar de un problema con esta herramienta