php – symfony 1.4解释并且不会在模板中使用fetchOne()显示html
我有以下设置:php 5.4,symfony 1.4.17和firefox,即chrome.
我已经构建了一个简单的新闻模块. >表:TbNews > id作为主键 如果我使用fetchOne()(在模板中),则在写入内容之前解释html. 如果我使用symfony pager(在行动中,然后是模板),则不会解释html,并且我会在输出中看到带有内容的HTML标记. 我已阅读其他主题,出于安全原因,symfony输出escaper会自动将HTML转换为“text”,我们必须对数据使用getRawValue来获取原始HTML字符. > show html tags in template – symfony and CKEDITOR. how safety? 我有一些问题: >为什么symfony输出escaper正在使用symfony pager及其 示例代码: //1. fetchOne() outputs content interpreting html before. //index/templates/indexSuccess.php //------------------------------- $q = Doctrine_Query::create()->from('TbNews e')->where('e.id = ?','1'); $new = $q->fetchOne(); // <p>testcontent</p>rn echo $new['scontent']; // output: testcontent --- OK,output is not escaped because we are jumping symfony output escaper since we are doing it directly in the action. //2. Get all news with symfony pager,html tags are not interpreted,html tags are shown. //index/actions/actions.class.php //------------------------------- $app_max_news_in_homepage = 4; $this->pager = new sfDoctrinePager('TbNews',$app_max_news_in_homepage); $this->pager->setQuery(Doctrine::getTable('TbNews')->createQuery('a')); $this->pager->setPage($request->getParameter('page',1)); $this->pager->init(); //index/templates/indexSuccess.php //-------------------------------- foreach ($pager->getResults() as $new) { echo $new['scontent']; // <p>testcontent</p>rn } //output: <p>testcontent</p> --- OK,since output is escaped by symfony output escaper since we get data at the action and show it in the template. 解决方法
你的第一次测试是错误的.
当你使用fetchOne()进行测试时,你就在一个动作中.因此,您从数据库中检索的内容和您显示的内容(使用echo)不会被转义,因为它不会发送到模板. 执行第二次测试时,将从操作中检索内容并在模板中显示结果.在这种情况下,内容由sfOutputEscaper转义.如果您进行第一次测试,然后尝试在模板中显示内容,您将看到html被转义. // in actions $this->new = $q->fetchOne(); // in template echo $new['scontent']; // result-> <p>testcontent</p>rn 如果您已激活escaping_strategy&在您的应用程序/ [app_name] /config/settings.yml中的escaping_method,将为模板提供的所有内容都将被转义. 当我想显示已转义的html内容时,我通常使用sfOutputEscaper中的unescape方法.在你的情况下: foreach ($pager->getResults() as $new) { echo sfOutputEscaper::unescape($new['scontent']); } 另一种选择(由Michal Trojanowski说): foreach ($pager->getResults()->getRawValue() as $new) { echo $new['scontent']; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |