【问题标题】:Symfony/Doctrine: Unserialize in action vs templateSymfony/Doctrine:反序列化在行动与模板
【发布时间】:2010-03-25 05:06:45
【问题描述】:

谁能告诉我为什么调用“反序列化”在操作中可以正常工作,但在模板中会出现偏移错误?

基本上可以将数据库文本结果反序列化为操作中的变量并将其传递给模板,在这种情况下它可以正常显示:

$this->clean = unserialize($this->raw);
<?php echo $clean ?>

但如果直接在模板中调用则不会:

<?php echo unserialize($raw) ?>

想知道为什么会这样以及是否有一些解决方法。

谢谢。

【问题讨论】:

    标签: php templates symfony1 doctrine serialization


    【解决方案1】:

    Symfony 将所有模板变量放入sfOutputEscaperArrayDecorator 类中。所以当你写unserialize($var)时,你实际上是在尝试反序列化 sfOutputEscaperArrayDecorator 类。

    我建议在 settings.yml 中关闭输出转义:

    escaping_strategy:     false
    

    这是 Symfony 中一个愚蠢的、破坏性能的、不必要的功能,需要被扼杀。

    更新

    如果您关闭 escaping_strategy,则需要使用 htmlSpecialCharacters() 手动转义来自用户的输入(以防止 XSS)。

    Symfony 类会为您做到这一点,但这意味着它还会转义每一个数字和字符——您已经知道其中 99% 是安全的(ID、日期、您自己的内容)。当我关闭自动转义时,我的服务器负载明显下降。

    请记住,如果您将 sfOutputEscaperArrayDecorator 传递给部分,Symfony 双重应用这种自动转义,这意味着 &gt; 将变为 &amp;amp;gt;

    【讨论】:

    • @Coronatus...啊,这很有道理。如果我关闭逃避策略,我还能期望改变什么? (除非这是我应该正确阅读的内容)
    • 另外,我真的很想听听它是如何影响性能的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 2020-05-25
    相关资源
    最近更新 更多