Codificador / Decodificador de Entidades HTML

Convierte caracteres especiales a entidades HTML (&, <, ©) o decodifica entidades de vuelta a texto legible — en ambas direcciones, en vivo.

961 visitas

Cómo Funciona

HTML reserva un puñado de caracteres para su propia sintaxis: < y > marcan las etiquetas, y & inicia una referencia de entidad. Si esos caracteres aparecen literalmente dentro de contenido que se inserta en una página — un comentario, un nombre de usuario, una búsqueda que se muestra de vuelta — el navegador intenta interpretarlos como marcado en lugar de mostrarlos como texto. La codificación los convierte en su forma de entidad (&lt;, &gt;, &amp;) para que se muestren como los caracteres literales en lugar de ser interpretados. La decodificación hace lo inverso, convirtiendo entidades como &amp; o &#8217; de vuelta en los caracteres reales que representan.

Esto no es un detalle cosmético — es un control de seguridad. Si un cuadro de comentarios toma la entrada del usuario y la inserta en el HTML de la página sin codificarla primero, un visitante puede escribir <script>...</script> y hacer que ese script se ejecute realmente en el navegador de cualquier otro visitante: este tipo de vulnerabilidad se llama Cross-Site Scripting (XSS), y codificar la salida no confiable antes de que toque el HTML es la defensa estándar contra ella. Por ejemplo, codificar el texto 5 < 10 & 10 > 5 produce 5 &lt; 10 &amp; 10 &gt; 5, que se muestra correctamente y no puede confundirse con marcado.

Lo Que Deberías Saber

  • Las entidades con nombre y las numéricas representan el mismo carácter de forma distinta. &apos; (con nombre) y &#39; (numérica) significan ambas una comilla simple, pero las entidades con nombre dependen de que el analizador reconozca ese nombre específico — las entidades numéricas (decimales o hexadecimales &#x) son universalmente compatibles y más seguras para salidas generadas por máquina.
  • La codificación no es la única defensa. Protege el contenido de texto; los atributos, las URL y los contextos de JavaScript en línea necesitan sus propias reglas de escape, ya que un valor dentro de href="javascript:..." o dentro de un bloque <script> se analiza bajo reglas distintas a las del texto normal del cuerpo.
  • La conversión es local. Esta herramienta usa el propio analizador DOM de tu navegador — no se sube ni se registra nada.
  • No todos los lenguajes de plantillas del lado del servidor escapan automáticamente por defecto. Algunos (como una salida de PHP antigua o la concatenación cruda de cadenas) requieren que llames explícitamente a una función de escape — olvidarlo es una de las fuentes más comunes de errores XSS en el mundo real.
  • Algunas entidades se ven casi idénticas visualmente. Un apóstrofo recto (') y una comilla simple tipográfica de cierre (&#8217;) se muestran casi igual en pantalla pero son secuencias de bytes distintas — una distinción que importa en muestras de código o en URL.

Un ejemplo concreto de antes/después: un campo de comentario que contiene ¡Buen post! 5 < 10, ¿verdad? no necesita ningún tratamiento especial como texto plano, pero en el momento en que se inserta sin escapar en una plantilla HTML, un visitante malicioso podría en cambio enviar <img src=x onerror=alert(1)> — la codificación convierte eso en texto inerte y visible en lugar de un manejador de error de imagen que se ejecuta.

Preguntas Frecuentes

¿Por qué codificar el texto antes de ponerlo en HTML?

Un < o & sin escapar en contenido HTML puede interpretarse como marcado, rompiendo el diseño de la página o — mucho peor — permitiendo que etiquetas <script> o <img onerror> inyectadas se ejecuten realmente (Cross-Site Scripting). Codificar a &lt; y &amp; mantiene el texto literal e inerte, sin importar lo que haya escrito un usuario.

¿Maneja tanto entidades con nombre como numéricas?

Sí — la decodificación entiende tanto entidades con nombre (&amp;copy;) como numéricas, ya sean decimales (&amp;#169;) o hexadecimales (&amp;#x00A9;). Las tres representan el mismo carácter ©; la herramienta normaliza cualquiera de ellas de vuelta al glifo real.

¿Por qué usar una entidad numérica en lugar de una con nombre, o viceversa?

Las entidades con nombre (&amp;apos;, &amp;hellip;) son más legibles en el código fuente, pero dependen de que el analizador reconozca exactamente ese nombre — un puñado de las menos comunes tiene soporte inconsistente en herramientas más antiguas. Las entidades numéricas (&amp;#39;, &amp;#8230;) son entendidas universalmente por cualquier analizador HTML sin importar su antigüedad o proveedor, por eso las herramientas automatizadas y las bibliotecas de sanitización suelen preferirlas.

¿Codificar por sí solo hace que mi página sea segura frente a XSS?

Maneja los nodos de texto, pero HTML tiene otros contextos de inyección — dentro del valor de un atributo, dentro de una URL, dentro de un bloque <script> o <style> — cada uno necesita su propio enfoque de escape, ya que el analizador del navegador cambia de reglas según en qué parte del documento se encuentre. Codificar el contenido de texto con entidades es una capa esencial, no toda la defensa; un paso más amplio de "sanitización" que elimina o reescribe etiquetas completas es una herramienta distinta y más específica para cuando quieres permitir intencionalmente algo de HTML limitado.

¿Se envía mi texto a algún sitio?

No — la conversión ocurre al instante en tu navegador usando el propio analizador del DOM; nada se sube, se registra ni se almacena, lo que hace seguro probar contenido real enviado por usuarios, incluido cualquier cosa que sospeches que podría contener un intento de inyección.

Comentarios

Aún no hay comentarios — ¡sé el primero en escribir uno!

Herramientas Similares