Lección 3
Entidades en CMS y plantillas
Cuándo escapar nodos de texto, atributos y campos exportados.
Las plataformas CMS y motores de plantillas a menudo escapan contenido automáticamente — pero no siempre en la capa que esperas.
Nodos de texto vs atributos
Para nodos de texto HTML, los escapes críticos suelen ser <, > y &.
Para valores de atributo, también necesitas comillas escapadas cuando el atributo va delimitado por " o '. Un valor como He said "hi" dentro de title="..." rompe el atributo a menos que las comillas estén codificadas.
Trampas de doble codificación
Una cadena de bug habitual:
- El CMS almacena
Tom & Jerry(ya escapado) - Un motor de plantillas escapa de nuevo →
Tom &amp; Jerry - La página muestra texto literal
&en lugar de&
Corrección: escapa una vez, en el límite donde entra texto no confiable en HTML. Si los datos ya están codificados como entidad, decodifica o márcalos como seguros antes del siguiente paso de escape.
Rich text vs campos planos
Los editores rich-text pueden emitir fragmentos HTML con entidades ya embebidas. Los campos de texto plano pueden necesitar escape completo en la salida. Mezclar ambos en un pipeline causa visualización inconsistente.
Email y formatos de exportación
Las exportaciones CSV, APIs JSON y plantillas de email a menudo codifican entidades para compatibilidad XML/HTML. Cuando importas esos datos en una página web, verifica si el consumidor espera texto crudo o HTML previamente escapado.
Autoescape de frameworks
React, Vue y sistemas de plantillas modernos escapan por defecto cuando usas sus APIs de interpolación de texto. dangerouslySetInnerHTML o bloques de plantilla crudos omiten esa protección — entidades y sanitización pasan a ser tu responsabilidad.