我有以下设置:php 5.4、symfony 1.4.17 和 firefox,即 chrome。
我已经建立了一个简单的新闻模块。
- 桌子:
TbNews
- 列:
id
作为主键scontent
作为保存新闻内容的文本字段。它将在里面有 html 内容,用 CKeditor 保存并且它工作得很好。
如果我使用fetchOne()
(在模板中),则在编写内容之前会解释 html。
如果我使用 symfony 寻呼机(在行动中,然后是模板),则不会解释 html,并且我会在输出中看到带有内容的 HTML 标记。您可以看到下面的示例,这些示例准确地显示了我在说什么。
我在其他主题中读过,出于安全原因,symfony 输出转义器会自动将 HTML 转换为“文本”,我们必须在数据上使用 getRawValue 来获取原始 HTML 字符。
- 在模板中显示 html 标签 - symfony 和 CKEDITOR。怎么安全?
- 阻止 symfony 从查询结果中转义 html
- Symfony.com 查看层输出转义
- Symfony sfOutputEscaper 方法 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.