欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于UEditor和thinkphp在一起的问题

程序员文章站 2022-05-26 21:16:51
...

题目取得很中二,主要不知道咋取。原归正传,这两天遇到一个很奇怪的问题,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