有人能告诉我为什么调用“unserialize”在一个动作中工作得很好但在模板中给出一个偏移错误?
基本上可以将数据库文本结果反序列化为动作中的变量并将其传递给模板,在这种情况下它显示正常:
$this->clean = unserialize($this->raw);
<?php echo $clean ?>
但是如果直接在模板中调用则不行:
<?php echo unserialize($raw) ?>
有兴趣知道为什么会这样,以及是否有一些解决方法。
感谢。
答案 0 :(得分:3)
Symfony将所有模板变量放入sfOutputEscaperArrayDecorator
类。因此,当您编写unserialize($var)
时,您实际上是在尝试反序列化sfOutputEscaperArrayDecorator类。
我建议在settings.yml:
中关闭输出转义escaping_strategy: false
这是Symfony的一个愚蠢,性能掠夺,不必要的特征,需要被谋杀。
<强>更新强>:
如果关闭escaping_strategy,则需要使用htmlSpecialCharacters()
手动转义用户的输入(以防止XSS)。
Symfony类为您做到这一点,但这意味着它也会逃避每一个数字和字符 - 您已经知道的99%将是安全的(ID,日期,您自己的内容)。当我关闭自动转义时,我的服务器负载显着下降。
请注意,如果您将sfOutputEscaperArrayDecorator
传递给部分,则Symfony 会双重这种自动转义,这意味着>
将成为&gt;