Mustache.js: Démasquer toutes les valeurs

Créé le 14 août 2012  ·  14Commentaires  ·  Source: janl/mustache.js

serait-il possible d'ajouter une option pour ne pas du tout s'échapper du html ?

Commentaire le plus utile

Je ne l'ai pas testé, mais d'après la page de manuel :
All variables are HTML escaped by default. If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
Si cela ne fonctionne pas, vous pouvez utiliser une fonction qui renvoie simplement son entrée sans échappement.

Tous les 14 commentaires

Je ne l'ai pas testé, mais d'après la page de manuel :
All variables are HTML escaped by default. If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
Si cela ne fonctionne pas, vous pouvez utiliser une fonction qui renvoie simplement son entrée sans échappement.

Oui, c'est le comportement actuel, mais mon cas d'utilisation pour cela a une entrée extrêmement fiable et beaucoup de caractères spéciaux.

Je faisais référence à cette partie :
If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
Donc, si vous ne voulez pas que vos variables soient échappées, vous devez utiliser la triple moustache au lieu du double.
Edit : je l'ai testé et cela est correctement implémenté dans cette implémentation.

Ouais, je me demandais s'il pourrait y avoir un raccourci utile pour changer le comportement par défaut.

Certaines implémentations ont supporté un pragma d'échappement inversé dans le passé (mustache.php v1.x, ruby ​​v0.8ish). Cela a essentiellement échangé la signification de {{ foo }} et {{{ foo }}} . Il est pratique pour une utilisation non html, comme les fichiers ini, car l'échappement des entités html n'a aucun sens dans ce cas, et cela vous évite un tas de moustaches supplémentaires.

Cependant, Moustache.php v2.x ne prend pas en charge ce pragma. Nous avons plutôt opté pour une option d'échappement personnalisée, permettant aux utilisateurs de passer un autre rappel d'échappement. Passer function($text) { return $text; } transforme la fuite en un no-op.

Hmm, cela correspondrait exactement à mon cas d'utilisation. Est-il possible de le faire dans moustache.js, et si oui, où passeriez-vous cette fonction ?

D'accord, vous pouvez vous en tenir aux directives de l'OWASP, mais s'échapper à tout moment n'est pas utile dans certains cas. Y a-t-il un ETA pour que ce problème soit terminé?

Ne serait-il pas plus simple de simplement échanger {{{ et {{ dans l'analyseur de votre installation ?

Pour le moment je viens de lancer :

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

sur tous mes modèles avant de l'exécuter, ce qui fonctionne. Ce serait juste bien d'avoir un système plus intégré. J'aime bien la suggestion de @bobthecow car elle vous permettrait d'échapper à d'autres choses si vous en aviez besoin. Par exemple, si vous aviez un format de type JSON plutôt qu'un format XML, vous voudrez peut-être échapper aux guillemets/virgules/deux-points, etc.

@janl et si je veux rendre le même modèle dans deux scénarios : premier échappé, deuxième non échappé ?

@bobthecow Nous pourrions facilement adopter la même approche dans moustache.js et simplement utiliser la version exportée de Moustache.escapeHtml pour tous les échappements. Cela permettrait aux utilisateurs de faire quelque chose comme :

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

Serait-ce utile? Bien sûr, vous devrez faire attention à réinitialiser la valeur de la fonction si vous voulez que l'échappement fonctionne correctement sur les invocations suivantes, et vous ne pourrez pas décider de vous échapper avec le triple-stache.

:+1: Je le creuse. Pour autant que je sache, le principal cas d'utilisation est de désactiver complètement l'échappement, car il s'agit d'un document non HTML. Je ne vois pas beaucoup d'utilité pour échanger escape/noescape (c'est pourquoi je ne l'ai même pas implémenté dans Moustache.php v2).

Oui, cela répondrait certainement à mon cas d'utilisation, et je peux envisager que d'autres personnes l'utilisent comme disent :

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

pour échapper aux chaînes. Ou ils pourraient mettre en œuvre des fonctions de liste blanche. En bref, cela résoudrait tous les cas d'utilisation auxquels je peux penser.

Je ne l'ai pas testé, mais d'après la page de manuel :
All variables are HTML escaped by default. If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
Si cela ne fonctionne pas, vous pouvez utiliser une fonction qui renvoie simplement son entrée sans échappement.

Merci beaucoup!! Cela marche.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

Immortalin picture Immortalin  ·  12Commentaires

rlightner picture rlightner  ·  7Commentaires

barbalex picture barbalex  ·  5Commentaires

MatthijsZw picture MatthijsZw  ·  18Commentaires

zekth picture zekth  ·  18Commentaires