【问题标题】:CakePHP is unwantedly encoding HTML entities in View output via ExceptionRendererCakePHP 通过 ExceptionRenderer 对视图输出中的 HTML 实体进行了不必要的编码
【发布时间】:2012-12-11 12:39:35
【问题描述】:

我正在尝试通过扩展 ExceptionRenderer 在 CakePHP 2.0 中创建自定义 404 页面。一切工作正常,除非我在 View Cake 中输出 HTML 标记字符串时对 HTML 实体进行了不必要的编码。我怎样才能防止这种情况发生?

在我的渲染器中我有:-

class AppExceptionRenderer extends ExceptionRenderer {
    public function missingController($error) {
        $this->controller->set('test', '<p>Test</p>');
        header('HTTP/1.1 404 Not Found');
        $this->controller->render('/Errors/error404', 'default');
        $this->controller->set('title_for_layout', 'Page Not Found');
        $this->controller->response->send();
    }
}

在视图中(View/Error/error404.ctp):-

<?php echo $test ?>

这会输出&amp;lt;test&amp;gt; 而不是&lt;p&gt;test&lt;/p&gt;

在我的实际代码中,test 将由数据库中的内容设置,因为这是一个 CMS 驱动的站点。我只是在上面的渲染器代码中设置test 作为示例(并证明代码的行为符合我的观察)。

【问题讨论】:

    标签: cakephp cakephp-2.0


    【解决方案1】:

    您不应该在 PHP 中使用 HTML,您应该在视图文件中编写任何标记。

    我没有遇到过需要在 PHP 代码中编写标记的情况,但如果您没有其他方法,您可以随时在视图中使用 html_entity_decode() 函数。

    很遗憾,我不知道如何阻止 Cake 自动编码。

    【讨论】:

    • 我完全同意 HTML 不属于 PHP。我正在开发一个 CMS 驱动的站点,该站点需要从数据库中检索此内容。我只是将 $test 变量放在上面的代码中作为示例,并测试它没有被数据库以编码形式返回。 html_entity_decode() 确实有效,但想知道 Cake 首先为什么要这样做。当我在控制器中设置变量时,我的应用程序的其他地方不会出现此问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 2011-07-20
    • 2017-11-08
    • 2020-07-03
    • 1970-01-01
    相关资源
    最近更新 更多