Mustache.js: Unescape todos los valores

Creado en 14 ago. 2012  ·  14Comentarios  ·  Fuente: janl/mustache.js

¿Sería posible agregar una opción para no hacer ningún escape de html en absoluto?

Comentario más útil

No lo he probado, pero según la página del manual:
All variables are HTML escaped by default. If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
Si eso no funciona, puede usar una función que simplemente devuelva su entrada sin escape.

Todos 14 comentarios

No lo he probado, pero según la página del manual:
All variables are HTML escaped by default. If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
Si eso no funciona, puede usar una función que simplemente devuelva su entrada sin escape.

Sí, ese es el comportamiento actual, pero mi caso de uso para esto tiene una entrada extremadamente confiable y muchos caracteres especiales.

Me estaba refiriendo a esta parte:
If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
Entonces, si no desea que se escapen sus variables, debe usar el bigote triple en lugar del doble.
Editar: lo probé y esto está implementado correctamente en esta implementación.

Sí, me preguntaba si podría haber un atajo útil para cambiar el comportamiento predeterminado.

Algunas implementaciones han admitido un pragma de escape invertido en el pasado (mustache.php v1.x, ruby ​​v0.8ish). Esto esencialmente cambió el significado de {{ foo }} y {{{ foo }}} . Es útil para uso no html, como archivos ini, ya que escapar de las entidades html no tiene sentido en ese caso, y le ahorra un montón de bigotes adicionales.

Sin embargo, Mustache.php v2.x no es compatible con este pragma. En su lugar, optamos por una opción de 'escape' personalizada, que permite a los usuarios pasar una devolución de llamada de escape alternativa. Pasar function($text) { return $text; } convierte el escape en una operación no operativa.

Hmm, eso encajaría exactamente en mi caso de uso. ¿Es posible hacer eso en moustache.js, y si es así, dónde pasaría esa función?

Bien, está bien seguir las pautas de OWASP, pero escapar en todo momento no es útil en algunos casos. ¿Hay alguna ETA para completar este número?

¿No sería más fácil simplemente intercambiar {{{ y {{ en el analizador de su instalación?

Por el momento solo ejecuto:

template.replace(/\{\{([^\}]*)\}\}/g, '{{{$1}}}');

en todas mis plantillas antes de ejecutarlo, lo que funciona. Sería bueno tener un sistema más integrado. Me gusta bastante la sugerencia de @bobthecow , ya que te permitiría escapar de otras cosas si lo necesitaras. por ejemplo, si tuviera un formato JSON en lugar de XML, es posible que desee escapar de las comillas / comas / dos puntos, etc.

@janl ¿qué

@bobthecow Podríamos fácilmente tomar el mismo enfoque en moustache.js y simplemente usar la versión exportada de Moustache.escapeHtml para todos los escapes. Eso permitiría a los usuarios hacer algo como:

Mustache.escapeHtml = function (text) { return text; }

¿Sería útil eso? Por supuesto, debe tener cuidado de restablecer el valor de la función si desea que el escape funcione correctamente en las invocaciones posteriores, y no podrá decidir escapar con el triple stache.

: +1: Me encanta. Por lo que puedo decir, el caso de uso principal es deshabilitar el escape por completo, porque es un documento que no es HTML. No veo mucho uso para intercambiar escape / noescape (por eso ni siquiera lo implementé en Moustache.php v2).

Sí, eso definitivamente cumpliría con mi caso de uso, y puedo imaginar que otras personas lo usen como dicen:

Mustache.escapeHtml = function (text) { return text.replace(/\"/g, '\\"'; }

para escapar de las cuerdas. O podrían implementar funciones de lista blanca. En resumen, arreglaría todos los casos de uso que se me ocurren.

No lo he probado, pero según la página del manual:
All variables are HTML escaped by default. If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
Si eso no funciona, puede usar una función que simplemente devuelva su entrada sin escape.

¡¡Gracias una tonelada!! Esto funciona.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

kuldeepdhaka picture kuldeepdhaka  ·  9Comentarios

amper5and picture amper5and  ·  5Comentarios

mbrodala picture mbrodala  ·  16Comentarios

zekth picture zekth  ·  18Comentarios

chlab picture chlab  ·  11Comentarios