如何使Smarty自动转义所有模板变量但忽略捕获

时间:2012-07-11 09:52:51

标签: smarty smarty3

我想自动转义所有模板变量,也就是说,我希望它们能够被转义,而不必一直写|escape。因此,我启用了$escape_html选项。

然而,显然Smarty以相同的方式处理使用{capture}创建的变量,即使这些变量可以被视为可信输入。我们的代码库中有很多这些代码库,不得不在任何地方写nofilter几乎和写|escape一样烦人。

当然必须有解决方案吗?或$escape_html{capture}不兼容?

1 个答案:

答案 0 :(得分:3)

根据定义,

$escape_html{capture}并不相容,不。

$escape_html(以及{setfilter}default_modifiers)遭遇不知道变量上下文的问题。只要输出变量,就会执行它们。没有“变量来自哪里”跟踪,这将允许Smarty编译器实现“嘿,变量$ foo是通过捕获定义的,因此已经被转义,不再逃避它”。当考虑诸如“在javascript的捕获组转义中,结果字符串转义为html”之类的情况时,它甚至会变得更糟。

目前您的选择相当有限:

  1. |逃避需要逃避的事情
  2. nofilter不应该被转义的所有内容(再次)

  3. 我将与Smarty的编译器维护者讨论这个问题,以弄清楚我们可以做些什么。但是,如果我们找到解决方案,它将与Smarty 3.2一起引入 - 最早的。所以现在,手动转义/ nofilter。