【发布时间】:2013-02-01 11:59:30
【问题描述】:
我有以下设置:php 5.4、symfony 1.4.17 和 firefox,即 chrome。
我已经构建了一个简单的新闻模块。
- 表:
TbNews - 列:
-
id作为主键 -
scontent作为保存新闻内容的文本字段。它将包含 html 内容,使用 CKeditor 保存,并且可以完美运行。
-
如果我使用fetchOne()(在模板中),则在写入内容之前会解释 html。
如果我使用 symfony 寻呼机(在行动中,然后是模板),则不会解释 html,并且我会在输出中看到带有内容的 HTML 标记。 您可以查看下面的示例,这些示例准确地显示了我在说什么。
我在其他主题中读到,出于安全原因,symfony 输出转义器会自动将 HTML 转换为“文本”,我们必须在数据上使用 getRawValue 来获取原始 HTML 字符。
- show html tags in template - symfony and CKEDITOR. how safety?
- Stop symfony from escaping html from query result
- Symfony.com View Layer Output Escaping
- Symfony sfOutputEscaper method getRawValue()
我有一些问题:
- 为什么 symfony 输出转义器与 symfony 寻呼机一起工作,及其
如果我们使用
fetchOne()则不起作用? - 我应该如何在下面的示例中使用
getRawValue()和 symfony 寻呼机,解释 HTML,然后只显示内容? -
getRawValue()是仅获取书面内容的最佳选择吗?
示例代码:
//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>\r\n
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>\r\n
}
//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.
【问题讨论】:
标签: php html escaping symfony-1.4 html-escape-characters