cms编辑器不显示的文章内容

原创 zhaoliang  2015-08-27 19:00  阅读 913 views 次

Windows下的dedecms使用正常,放至Linux服务器上面却发现编辑器里不显示文章正文内容,进行保存后,数据表里的记录也没有了。后来经过一段段的调试代码,终于发现问题出现在htmlspecialchars这个方法上面了。

htmlspecialchars在PHP5.4版本之后进行了升级,先来看一下这个方法的调用参数,htmlspecialchars(string,flags,character-set,double_encode),参数说明中sting是个必填项,我们在日常使用中,基本上也只用这一个参数,后面的参数是选填项所以都不填写了。这次的问题就出现在传参调用上。

我的个人电脑是在Windows下搭建的PHP 5.2的开发环境,线上使用的是Linux下的PHP 5.4环境,而我使用dedecms的编码又是gbk格式的,所以就出现了上面的问题了,问题出在网站的程序编码和PHP版本上。htmlspecialchars第三个参数character-set,在这引用一段原文说明:

注释:在 PHP 5.4 之前的版本,无法被识别的字符集将被忽略并由 ISO-8859-1 替代。自 PHP 5.4 起,无法被识别的字符集将被忽略并由 UTF-8 替代。

找到了问题的根源所在,就只好改一下dedecms里的代码了。找到cms安装目录下对应的文件:

web/include/ckeditor/ckeditor_php5.php

大概137行的位置,将

$out = "<textarea name=\"" . $name . "\"" . $attr . ">" . htmlspecialchars($value) . "</textarea>\n";

改为:

$out = "<textarea name=\"" . $name . "\"" . $attr . ">" . htmlspecialchars($value,ENT_QUOTES,'gb2312') . "</textarea>\n";

即,将原来的只传一个参数,改为传三个参数,指定字符编码,注意此处是用的gb2312不是gbk,问题就这样解决了问题顺利解决了。

顺带给大家提点小建议,希望能有所帮助:

1.开发环境的软件版本尽量跟正式环境保持一致;

2.提高开发环境的代码报错级别为E_ALL,尽量不要屏蔽Notice类的提示信息;

3.采用开源的软件,尽量使用utf-8编码格式;

如果你手头上负责的是比较大的项目,有多人参与,希望能采纳一下以上几点小建议,这样会在无形中会帮你避免很多小细节类的棘手问题。当然了,如果是自己的小项目或私活什么的就无所谓了,你懂得。

本文地址:http://blog.58cm.cn:8088/archives/152.html
版权声明:本文为原创文章,版权归 zhaoliang 所有,欢迎分享本文,转载请保留出处!

评论已关闭!