DEDECMS是一款广受欢迎的开源网站管理系统,因其简单易用和高度可定制性,深受广大站长的喜爱。在国内,许多企业网站和展示型网站都是基于DEDECMS进行二次开发和搭建的。然而,由于DEDECMS是开源项目,可能缺乏专门团队对其进行持续升级和维护,因此在某些特定环境下可能会出现一些漏洞或兼容性问题。
昨天,小编帮助一位站长朋友在PHP空间上安装了DEDECMS程序,整个安装过程非常顺利。然而,今天这位站长在后台尝试发布文章时遇到了一个奇怪的问题:当输入中文标题并点击发布时,系统总是提示“标题不能为空”。而使用英文标题测试时,却可以正常发布。这表明问题可能与中文字符编码有关。
经过多次排查,包括重新上传程序文件、检查服务器环境等操作后,我们发现这一问题主要与PHP版本相关。如果服务器运行的是高于PHP5.3的版本,通常不会出现此错误;但对于低于PHP5.3的版本,这种错误则较为常见。那么,如何解决这一问题呢?以下是具体的解决方案:
第一步:修改include/ckeditor/ckeditor_php5.php文件
通过FTP工具连接到服务器,找到路径include/ckeditor/ckeditor_php5.php,使用高级编辑器打开该文件,并定位到第137行代码:
$out = "<textarea name=\\\\"" . $name . "\\\\"" . $attr . ">" . htmlspecialchars($value) . "</textarea>\\\\n";
将上述代码修改为:
$out = "<textarea name=\\\\"" . $name . "\\\\"" . $attr . ">" . htmlspecialchars($value, ENT_COMPAT , 'GB2312') . "</textarea>\\\\n";
第二步:修改dede/article_add.php文件
继续通过FTP工具找到路径dede/article_add.php,使用高级编辑器打开该文件,并定位到第101行代码:
$title = htmlspecialchars(cn_substrR($title,$cfg_title_maxlen));
将上述代码修改为:
$title = htmlspecialchars(cn_substrR($title,$cfg_title_maxlen),ENT_COMPAT ,'GB2312');
第三步:修改dede/article_edit.php文件
同样地,通过FTP工具找到路径dede/article_edit.php,使用高级编辑器打开该文件,并定位到第108行代码:
$title = htmlspecialchars(cn_substrR($title,$cfg_title_maxlen));
将上述代码修改为:
$title = htmlspecialchars(cn_substrR($title,$cfg_title_maxlen),ENT_COMPAT ,'GB2312');
完成以上三个文件的修改后,保存并上传至服务器覆盖原文件。接着,登录DEDECMS后台,一键更新缓存,再次尝试发布文章即可恢复正常。
问题的根本原因在于函数htmlspecialchars()在处理中文字符串时,因默认编码设置不当导致转义后的标题为空。通过上述步骤,我们将参数明确指定为GB2312编码格式,从而成功解决了这一问题。