HTML Encoder
Encode and decode HTML entities
Codificador HTML de Entidades Online - Escape y Encode
¿Qué son las entidades HTML y por qué son necesarias?
Las entidades HTML son códigos especiales que representan caracteres que no pueden escribirse directamente en HTML o que tienen significado sintáctico en el lenguaje. Los caracteres < > & " y ' DEBEN codificarse cuando aparecen como contenido (no como markup) para evitar que se interpreten como código HTML, lo cual podría romper la página o, peor aún, permitir ataques XSS. Además, caracteres no ASCII como letras acentuadas (á é í ó ú ñ ü), símbolos matemáticos (± × ÷), emojis, y caracteres de otros idiomas pueden codificarse para garantizar compatibilidad con todas las codificaciones de caracteres y sistemas heredados.
¿Cuál es la diferencia entre entidades con nombre y numéricas?
Las entidades con nombre son mnemotécnicas y legibles: & (ampersand), < (less than), > (greater than), " (comillas dobles), ' (comilla simple), (espacio no rompible), © (copyright). Sin embargo, solo existen para un subconjunto de caracteres comunes. Las entidades numéricas pueden representar cualquier carácter Unicode: formato decimal < (es <) o hexadecimal < (también <). Ambos formatos son funcionalmente equivalentes y válidos en HTML5. Las numéricas son necesarias para caracteres raros o emojis que no tienen nombre asignado.
¿Cómo previene la codificación HTML los ataques XSS?
Cross-Site Scripting (XSS) ocurre cuando datos maliciosos del usuario se insertan en HTML sin escapar, permitiendo ejecución de JavaScript no autorizado. Ejemplo: si un usuario introduce <script>robarCookies()</script> como nombre y se muestra sin codificar, el script se ejecuta. La codificación HTML convierte esto a <script>robarCookies()</script>, que se muestra como texto inofensivo en lugar de ejecutarse. Frameworks modernos (React, Angular, Vue) codifican automáticamente, pero debes ser extremadamente cuidadoso al usar innerHTML, dangerouslySetInnerHTML, [innerHTML], o APIs similares que bypassean esta protección.
Preguntas frecuentes
¿Cuándo debo codificar caracteres como entidades HTML?
Siempre que muestres contenido dinámico o proporcionado por usuarios en HTML. Esto incluye: comentarios de usuarios, nombres y perfiles, datos de formularios, contenido de APIs externas, resultados de búsqueda, mensajes de error que incluyen input del usuario, y cualquier string que no controles completamente. La regla de seguridad es: "codifica todo output al contexto correcto". Frameworks modernos lo hacen automáticamente para el contexto HTML, pero no para URLs, JavaScript inline, o CSS, que requieren codificaciones diferentes.
¿Cuál es la diferencia entre codificación HTML y codificación URL?
Son sistemas completamente diferentes para contextos diferentes. La codificación HTML usa & seguido del nombre o número de entidad (ejemplo: & para &) y se usa dentro de documentos HTML para caracteres especiales. La codificación URL usa % seguido de dos dígitos hexadecimales (ejemplo: %26 para &) y se usa en URLs para caracteres no permitidos en URIs. Usar la codificación incorrecta para el contexto causa errores o, peor, vulnerabilidades de seguridad. Un & en una URL se codifica como %26, pero en HTML se codifica como &.
¿Debo codificar espacios y saltos de línea en HTML?
Los espacios regulares no requieren codificación, pero HTML colapsa múltiples espacios consecutivos a uno solo. Para preservar espacios, usa (non-breaking space) o CSS white-space: pre-wrap. Los saltos de línea (\n) en el código fuente HTML se ignoran en la renderización; usa <br> para saltos de línea visuales o CSS white-space para preservar formato. Solo caracteres con significado sintáctico en HTML (< > & " ') y caracteres fuera del rango ASCII básico requieren codificación obligatoria para evitar problemas.