ThinkPHP⾃动转义存储富⽂本编辑器内容导致读取出错的解决
⽅法
ThinkPHP的conf⽂件中的Convention.php有⼀个配置选项
'DEFAULT_FILTER' => 'htmlspecialchars', // 默认参数过滤⽅法⽤于I函数...
默认这个⽅法是开启的。也就是说,我们往数据库⾥⾯存储的数据中都会经过htmlspecialchars这个函数的转义处理。
我在我的项⽬中使⽤了Kindeditor富⽂本编辑器(或许你使⽤的是Ueditor\ckeditor),通过富⽂本编辑器编辑⽂章的内容然后存储到数据库中,再从数据库中读取显⽰到⽹页上来。
在这个过程中,我遇到⼀个问题,当我在insert⽅法直接显⽰我将提交到数据库⾥的⽂本数据时,能够正常解析成HTML页⾯,但是当我再从数据库⾥⾯读取HTML数据时,⽂章内容就变成了⼀整段HTML代码。dump输出我读取到的数组内容,可以很清楚的看到是已经转
义的内容。
1.数据库中存储的内容以及读取出来的⽂章内容实例:
<p>
你们知道吗?
</p>
2.在html页⾯中解析出来的内容效果:
“<p>
<span > </span><img src="/17joys/Public/kindeditor/attached/image/20140807/20140807110915_31727.jpg" alt="" width="800" height="600"> <span > </span></p>”ueditor漏洞php如何解决
很明显可以看出,原来应该变成HTML标签的内容现在被解析成了⽂本⾥⾯的内容,⽽且在⽂本内容的最外⾯还加上了双引号。
正常的显⽰应该是没有双引号的才对。数据库读取出来的数据就是HTML页⾯的源代码,然后插⼊HTML页⾯之后,标签被解释,标签内的内容显⽰成页⾯。
通过上⾯的分析,可以确定,是ThinkPHP在内容存储的过程中⾃动对内容进⾏了转义处理,导致了数据库中存储的内容变成了转义后的内容,再次读出来的时候HTML会⾃动将原本属于标签的内容转义成为正⽂⽂本。
所以,果断到TP的conf⽬录下convention.php配置⽂件,将DEFAULT_FILTER功能禁⽤掉,以后需要使⽤的时候再⼿动调⽤即可。
再次测试,这⼀次就解决了问题了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论