Mustache.js: Отменить экранирование всех значений

Созданный на 14 авг. 2012  ·  14Комментарии  ·  Источник: janl/mustache.js

Можно ли было бы добавить опцию, чтобы вообще не экранировать html?

Самый полезный комментарий

Я не тестировал его, но согласно справочной странице:
All variables are HTML escaped by default. If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
Если это не сработает, вы можете использовать функцию, которая просто возвращает ввод без экранирования.

Все 14 Комментарий

Я не тестировал его, но согласно справочной странице:
All variables are HTML escaped by default. If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
Если это не сработает, вы можете использовать функцию, которая просто возвращает ввод без экранирования.

Да, это текущее поведение, но мой вариант использования для этого имеет очень надежный ввод и множество специальных символов.

Я имел в виду эту часть:
If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
Поэтому, если вы не хотите, чтобы ваши переменные были экранированы, вы должны использовать тройные усы вместо двойных.
Изменить: я протестировал это, и это правильно реализовано в этой реализации.

Ага, интересно, есть ли полезный ярлык для изменения поведения по умолчанию.

Некоторые реализации ранее поддерживали инвертированную директиву escape (mustache.php v1.x, ruby ​​v0.8ish). По сути, это поменяло местами значения {{ foo }} и {{{ foo }}} . Он пригодится для использования не в формате html, например для файлов ini, поскольку в этом случае экранирование сущностей html не имеет смысла и избавляет вас от лишних усов.

Однако Mustache.php v2.x не поддерживает эту прагму. Вместо этого мы выбрали настраиваемую опцию «escape», позволяющую пользователям передавать альтернативный обратный вызов escape. Передача function($text) { return $text; } превращает побег в бездействие.

Хм, это точно подходит для моего варианта использования. Возможно ли это сделать в mustache.js, и если да, то где бы вы передали эту функцию?

Правильно, придерживаться руководящих принципов OWASP - это нормально, но в некоторых случаях постоянный побег бесполезен. Есть ли какое-либо расчетное время прибытия для завершения этой проблемы?

Не было бы проще просто поменять местами {{{ и {{ в синтаксическом анализаторе в вашей установке?

На данный момент просто бегаю:

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

на всех моих шаблонах перед его выполнением, что действительно работает. Было бы хорошо иметь более встроенную систему. Мне очень нравится предложение @bobthecow , поскольку оно позволит вам избежать других вещей, если вам нужно. например, если у вас был формат, подобный JSON, а не XML, например, вы могли бы избежать кавычек / запятых / двоеточий и т. д.

@janl, что, если я хочу отобразить один и тот же шаблон в двух сценариях: первый с экранированием, второй без экранирования?

@bobthecow Мы могли бы легко

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

Было бы это полезно? Конечно, вам нужно быть осторожным, чтобы сбросить значение функции, если вы хотите, чтобы экранирование работало должным образом при последующих вызовах, и вы не сможете принять решение о побеге с тройным усом.

: +1: Я копаю. Насколько я могу судить, основной вариант использования - это полное отключение экранирования, потому что это не HTML-документ. Я не вижу особого смысла в замене escape / noescape (поэтому я даже не реализовал ее в Mustache.php v2).

Да, это определенно соответствовало бы моему варианту использования, и я могу представить, что некоторые другие люди будут использовать это, как скажем:

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

чтобы избежать строк. Или они могут реализовать функции белого списка. Короче говоря, это исправит все возможные варианты использования.

Я не тестировал его, но согласно справочной странице:
All variables are HTML escaped by default. If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
Если это не сработает, вы можете использовать функцию, которая просто возвращает ввод без экранирования.

Благодаря тонну!! Это работает.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

barbalex picture barbalex  ·  5Комментарии

connor11528 picture connor11528  ·  3Комментарии

amper5and picture amper5and  ·  5Комментарии

zekth picture zekth  ·  18Комментарии

funston picture funston  ·  7Комментарии