在使用 Dedecms CMS 时,如果运行环境为 PHP 5.4 或更高版本,可能会遇到后台发布文章提示“标题不能为空”的问题。这一现象主要出现在 V5.7 版本中,并且仅在发布中文标题时出现,而英文标题则不会受到影响。本文将详细分析问题的根源以及提供有效的解决方案。

问题症状:
当您使用 Dedecms V5.7 登录后台并尝试发布文章时,如果标题为中文,系统会提示“标题不能为空”。然而,如果标题为英文,则可以正常发布。

问题根源:
PHP 5.4 版本引入了新的默认编码规则,htmlspecialchars 函数默认以 UTF-8 编码处理字符串。而 Dedecms 默认使用 GBK 编码,因此当 GBK 编码的中文字符串被传递给 htmlspecialchars 函数时,由于编码不匹配,中文字符会被转义为空字符串,最终导致系统判定标题为空。

解决办法:
为了使 htmlspecialchars 函数能够正确处理 GBK 编码的字符串,我们需要为其添加额外的参数,指定编码为 GB2312(兼容 GBK)。以下是具体修改步骤:


// 修改以下文件中的代码

// 1. dede/article_add.php 和 dede/article_edit.php
// 原始代码
$title = htmlspecialchars(cn_substrR($title, $cfg_title_maxlen));

// 修改后的代码
$title = htmlspecialchars(cn_substrR($title, $cfg_title_maxlen), ENT_COMPAT , 'GB2312');

// 2. include/ckeditor/ckeditor_php5.php 第 138 行
// 原始代码
htmlspecialchars($value)

// 修改后的代码
htmlspecialchars($value, ENT_COMPAT , 'GB2312')
    

具体修改页面:
1、打开 dede/article_add.phpdede/article_edit.php 文件。
找到以下代码:
$title = htmlspecialchars(cn_substrR($title,$cfg_title_maxlen));
将其替换为:
$title = htmlspecialchars(cn_substrR($title,$cfg_title_maxlen),ENT_COMPAT ,'GB2312');

2、打开 include/ckeditor/ckeditor_php5.php 文件。
定位到第 138 行,找到以下代码:
htmlspecialchars($value)
将其替换为:
htmlspecialchars($value, ENT_COMPAT ,'GB2312')

完成以上修改后,保存文件并重新测试文章发布功能。此时,无论是中文标题还是英文标题,都可以正常发布。

总结:
通过上述修改,我们解决了 Dedecms 在 PHP 5.4 环境下因编码问题导致的“标题不能为空”错误。关键在于为 htmlspecialchars 函数添加了正确的编码参数,使其能够兼容 GBK 编码的字符串。如果您遇到类似问题,请按照本文提供的方法进行调整。

希望这篇文章对您有所帮助!如果您还有其他问题,请随时联系技术支持或查阅相关文档。


注意:在实际操作中,请确保备份原始文件,以免因误操作导致系统异常。