2

一两个星期前,我刚开始认真使用 Zend Framework,但在使用 Zend_View::escape() 手动转义时遇到了麻烦。有谁知道如何在不使用 $this->escape() 或任何其他棘手的方式(如输出缓冲和 PREG 替换 *.phtml 文件)的情况下自动转义模板(Zend_View 模板)中的变量。

我想知道在这种情况下的最佳做法。

4

5 回答 5

2

你可以扩展 Zend_View 来创建一个自动转义的自定义视图类,或者你可以使用视图助手来打开/关闭自动转义。

我写了一篇关于它的博文,其中包含两种方法的示例代码: 如何在 Zend_View 中自动转义模板变量

于 2010-07-05T21:38:47.510 回答
2

在 PiKe 项目中,我们构建了一个自定义流包装器,它可以自动转义所有视图变量,并且对性能的影响很小!您仍然可以通过以下方式获取 RAW 值:

<?=~ $variable ?>

注意“~”字符。结帐http://code.google.com/p/php-pike/wiki/Pike_View_Stream

我知道你说过你想避免“像输出缓冲和 PREG 替换 *.phtml 文件这样的棘手方法”,但我仍然认为这是在 Zend Framework 1 中修复自动转义的一种非常巧妙的方法。

于 2011-09-16T08:13:27.877 回答
0

您已经要求最佳实践,那么您正在做的已经是它了。等到您想显示数据时再修改它,仅出于输出原因。

我知道你每次都觉得写 ->escape() 很乏味,但它仍然是要走的路。

如果您在哪里自动转义所有内容,那么有一天您想要/需要未转义的数据时会遇到问题。

于 2010-07-05T21:21:07.400 回答
0

你说“自动”,所以我相信这意味着当你做 echo $this->var; 你想让它逃脱。好吧,如果是这种情况,也许您可​​以在将变量设置为视图时进行转义。AFAIK 它是在 Zend_View_Abstract 类的 __set 魔术方法* 中完成的(大约第 300 行)。不建议更改核心 ZF 代码,因此您可以通过扩展 Z_V_A 或 Z_V 并覆盖 __set 方法。

*我不是 100% 确定 Z_V_A::__set 是唯一将参数分配给视图的地方,但我认为它应该是。想不出任何其他地方。

编辑:就个人而言,我会避免这种情况并坚持使用好的 ol' $this->escape()。更多的打字,但更少的魔法在后台发生。

于 2010-07-05T19:26:15.317 回答
0

ZendX_View_Autoescaping,这个项目为您提供了一个 ViewRenderer,它可以自动转义所有分配的视图变量。

https://github.com/jensklose/ZendX_View_Autoescaping

试试看!

它支持:

  • 逃入深层数据结构
  • 转义数组键
  • 切换转义上下文的可能性(html、json、nofilter)
于 2012-02-01T18:18:53.703 回答