我最近发现,与Django模板引擎不同,Smarty不会自动转义变量,我需要在模板中的大多数变量旁边放置。
关注文档,http://www.smarty.net/docsv2/en/variable.default.modifiers.tpl我需要设置默认修饰符,不需要吗?
所以,这是我的代码:
$smarty = new Smarty();
$smarty->default_modifiers = array('escape:"htmlall"');
...并且在我在它们旁边添加|转义之前,仍然没有转义变量。
我做错了什么?
答案 0 :(得分:4)
如果您使用的是Smarty 3,请尝试以下操作:
$smarty = new Smarty();
$smarty->loadFilter(Smarty::FILTER_VARIABLE, "htmlentities");
多田!
更新: Smarty::FILTER_VARIABLE
自2014年11月28日起未记录。如果您想坚持$smarty->escape_html = true
,请使用offical docs。
答案 1 :(得分:0)
看来此功能已从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}
与往常一样,请确保将这些内容修剪正确,并且不要插入不必要的空格。