所属栏目:发布日期:2016-12-02 16:04浏览量:2921作者:admin
最近在练习TP3.2制作个人博客时,在后台中使用ueditor发布文章并保存在数据库中。
如下图,文章内容非常简单一段文字加一个图片,后台中可以对文章进行修改:传入文章ID->读取数据库->在ueditor中显示,这些操作都没有问题。
在前台调用时却发现文章内容未正常显示--显示成了HTML实体的形式。考虑到文章内容在后台中显示正常,区别在于有无有使编程器。所以问题可能是编辑器保存数据时可能与通常形式不一样。
通过查看数据库中文章内容保存的结果得知,编辑器将HTML标签进行了转义后再保存,而输出到HTML页面中时,标签被转义回单独的字符直接显示成了HTML代码。这样处理的优点是可以避免sql注入;缺点是不能直接读取数据。
知道了原因,那么问题解决起来就容易多了。1.高手可以对ueditor数据处理方式进行修改(时间成本高,可能导致sql注入的漏洞);2.可以将文章内容先读取在ueditor中,再把ueditor中的内容显示在页面上(过程复杂,但简单有效);3.读取数据时先处理后,再在模板中进行显示(简单实用)。
这里简单说明下第三种方法:在读取数据后使用html_entity_decode函数把文章内容从 HTML 实体转换为字符。
public function index() {
$id = I('get.id', '', 'intval');
$field = array('id', 'title', 'time', 'content', 'cid', 'click');
$blog = M('blog')->field($field)->find($id);
$blog['content'] = html_entity_decode($blog['content']);
$blog['click'] += 1;
$where = array('id' => $id);
M('blog')->where($where)->setInc('click');
$this->assign('blog', $blog);
$this->display();
}
通过以上处理后,文章内容就可以在前台正常使用了。