Переменная autoescape в шаблонах Smarty - PullRequest
1 голос
/ 20 марта 2012

Недавно я обнаружил, что Smarty, в отличие от механизма шаблонов Django, не экранирует переменные автоматически, и мне нужно поставить | escape рядом с большинством переменных в моих шаблонах.

Следуя документации, http://www.smarty.net/docsv2/en/variable.default.modifiers.tpl Мне нужно установить модификаторы по умолчанию, не так ли?

Итак, вот мой код:

$smarty = new Smarty();
$smarty->default_modifiers = array('escape:"htmlall"');

... и все еще переменные НЕ экранированы, пока я не добавлю | escape рядом с ними.

Что я делаю не так?

Ответы [ 2 ]

4 голосов
/ 20 марта 2012

Если вы находитесь на Smarty 3, попробуйте это:

$smarty = new Smarty();
$smarty->loadFilter(Smarty::FILTER_VARIABLE, "htmlentities");

TaDa!

Обновление: Smarty::FILTER_VARIABLE недокументировано с 28/11/2014. Используйте $smarty->escape_html = true, если хотите придерживаться официальных документов .

0 голосов
/ 20 марта 2012

Похоже, эта функция была удалена из Smarty v3, а документы устарели.См .:

http://www.smarty.net/forums/viewtopic.php?p=62207

Я бы порекомендовал обходной путь - это уровень шаблона.Либо создайте новую функцию стиля v3, чтобы позаботиться о фильтрации, либо просто включите.

Метод включения

Поместите это в файл clean.tpl: {$text|escape:htmlall}

Затем вызовите как {include file=clean.tpl text=$myvariabletofilter}

Метод функций

Новые функции в Smarty также могут позаботиться об этом:

{function clean}
{$text|escape:htmlall}
{/function}

И вызвать как {clean text=$myvariabletofilter}

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

...