如何解决dedecms5.7发布文章时提示‘标题不能为空’的问题?
管理系统(DedeCMS)V5.7版本时,有时会遇到发布文章提示“标题不能为空”的问题,这一问题通常发生在使用PHP5.4及以上版本的环境中,特别是当用户尝试发布中文标题时,以下将详细解析此问题的原因,并提供具体的解决方法:
问题症状
在DedeCMS V5.7后台登录后,发布英文标题没有问题,但发布中文标题时会提示“标题不能为空”,这一现象表明问题与编码处理有关。
问题根源
问题的根源在于htmlspecialchars
函数在PHP5.4默认为utf8编码,当gbk编码的字符串经过htmlspecialchars
转义后,中文字符串会变成空,导致系统认为标题为空。htmlspecialchars
函数在没有指定编码参数的情况下,会默认使用当前PHP环境的字符集设置,而PHP5.4及以后的版本默认字符集是UTF8。
解决方法
为了解决这一问题,我们需要给htmlspecialchars
函数添加ENT_COMPAT
和'GB2312'
参数,以修改编码默认值,以下是具体的修改步骤:
修改dede/article_add.php
和dede/article_edit.php
1、打开文件dede/article_add.php
和dede/article_edit.php
。
2、找到如下代码:
$title = htmlspecialchars(cn_substrR($title,$cfg_title_maxlen));
3、将其修改为:
$title = htmlspecialchars(cn_substrR($title,$cfg_title_maxlen),ENT_COMPAT ,'GB2312');
修改include/ckeditor/ckeditor_php5.php
1、打开文件include/ckeditor/ckeditor_php5.php
。
2、找到大约第138行,代码如下:
htmlspecialchars($value)
3、将其修改为:
htmlspecialchars($value,ENT_COMPAT ,'GB2312')
测试与验证
完成上述修改后,保存文件并重新加载DedeCMS后台页面,再次尝试发布包含中文标题的文章,应该不会再出现“标题不能为空”的提示,如果问题依然存在,请检查文件是否正确保存,以及是否有其他代码干扰了修改效果。
文件路径 | 原代码 | 修改后代码 | 说明 |
dede/article_add.php | $title = htmlspecialchars(cn_substrR($title,$cfg_title_maxlen)); | $title = htmlspecialchars(cn_substrR($title,$cfg_title_maxlen),ENT_COMPAT ,'GB2312'); | 修改编码参数 |
dede/article_edit.php | $title = htmlspecialchars(cn_substrR($title,$cfg_title_maxlen)); | $title = htmlspecialchars(cn_substrR($title,$cfg_title_maxlen),ENT_COMPAT ,'GB2312'); | 修改编码参数 |
include/ckeditor/ckeditor_php5.php | htmlspecialchars($value) | htmlspecialchars($value,ENT_COMPAT ,'GB2312') | 修改编码参数 |
FAQs
Q1:如果不修改程序源码,还有其他解决方法吗?
A1:如果不希望修改程序源码,建议将PHP版本降级到PHP5.3,这是因为PHP5.4及以后的版本默认字符集是UTF8,而DedeCMS V5.7在设计时可能没有充分考虑到这一点,等待官方更新支持PHP5.4以后再进行升级是一个较为稳妥的选择。
Q2:为什么发布英文标题没有问题,而发布中文标题会出现“标题不能为空”?
A2:这是因为在PHP5.4中,htmlspecialchars
函数默认使用UTF8编码,当处理gbk编码的中文字符串时,如果没有指定编码参数,中文字符串会被错误地转义为空字符串,从而导致系统误判标题为空,通过添加编码参数ENT_COMPAT
和'GB2312'
,可以确保中文字符串被正确处理。