关于UEditor和thinkphp在一起的问题

时间:2022-09-24 16:37:34

题目取得很中二,主要不知道咋取。原归正传,这两天遇到一个很奇怪的问题,ueditor在tp3.1.3下使用是完全正常的,把原来在tp3.1.3下使用正常的ueditor相关的所有文件拷贝到tp3.2.3环境下使用的时候,出现了这么个问题:例如我再ueditor编辑器里输入了下面的内容
我是测试文字
然后点击保存写入到数据库后再取出来就变成了

<p>我是测试文字</p>

很显然,多了两个p标签,再打开然后啥都不修改再保存一次就会变成下面这样

&lt;p&gt;我是测试文字&lt;/p&gt;

再打开然后还不修改再保存,就变成下面这样:

&amp;lt;p&amp;gt;我是测试文字&amp;lt;/p&amp;gt;

乱码了是不是?问题是ueditor相关的所有文件都是从原来的项目里copy过来的,原来的项目里使用的时候是没有问题的,实例化ueditor编辑器的html代码也是从原来的项目里copy过来的,没有做任何改动,为什么在这个环境下就异常了呢?其实这里有两个原因,一个就是ueditor的问题,另外一个就是tp3.2.3的问题,ueditor默认会添加p标签,然后tp3.2.3在将数据写入数据库的时候会再过滤相关的html标签,将它们转化成html的字符实体。
以下是解决方案:

<!-- 加载编辑器的容器 -->  
<script id="container" name="content" type="text/plain">
这里写你的初始化内容
</script>

把这段代码换成:

<textarea id="container" name="content" type="text/plain">这里加载你的HTML数据</textarea>

用textarea….反正问题解决了,应该是tp在插入数据的时候有对数据类型进行校验,如果是<script> 标签下的内容就会做更严格的校验和过滤。

更新:事实的真相就是tp3.2.3对数据的写入做了更严格的校验和过滤,输入的默认过滤函数是htmlspecialchars,所以为了能输出html的数据必须用htmlspecialchars_decode函数解析一下,即模板中数据的输出应当使用这样{$cont|htmlspecialchars_decode}的方式,不然就会就会把tp过滤后的数据(在数据写入的时候,标签等特殊符号都已被htmlspecialchars函数过滤成字符实体了)直接输出。所以第二种解决方案就是在模板中输出数据的时候使用{$cont|htmlspecialchars_decode} 函数解析的方式输出。

参考文章:
ThinkPHP3.2.3配置UEditor