编码不一致,字符”在“保存”和“显示”这两个环节使用了不同的“翻译字典”,导致翻译出来的内容完全错误。

(图片来源网络,侵删)
下面我将为您详细分析 DedeCMS 网站乱码的原因和完整的解决方案,请按照步骤逐一排查。
乱码的根本原因
- 浏览器(客户端)的编码:浏览器(如 Chrome, Firefox)默认使用一种编码来解读网页内容。
- 网页文件(.html, .php)本身的编码:您保存
.php模板文件或生成的.html静态文件时,使用的编码格式。 - 数据库的编码:DedeCMS 的数据库(MySQL)存储数据时使用的编码格式。
- 网站程序的编码:DedeCMS 程序在处理和输出数据时,内部使用的编码格式。
当这四个环节的编码不统一时,乱码就产生了,在中文网站环境中,最标准、最推荐的编码是 UTF-8。
完整解决方案(从根源到表现层)
请按照以下顺序进行排查和修复,这能解决 99% 的乱码问题。
检查并统一数据库编码(最核心的步骤)
数据库是所有内容的源头,如果这里错了,后面怎么改都会乱。

(图片来源网络,侵删)
- 登录您的数据库管理工具(如 phpMyAdmin)。
- 在左侧列表中,找到您的 DedeCMS 数据库。
- 点击“操作”(Operations)选项卡。
- 在“数据库整理”(Database Collation)下拉菜单中,确保它设置为
utf8mb4_unicode_ci或utf8_general_ci。- 强烈推荐使用
utf8mb4,因为它能更好地支持 emoji 表情和一些特殊字符,是 UTF-8 的超集。
- 强烈推荐使用
- 如果不是,请修改它,然后点击“执行”(Go)。
注意:如果您的数据库中已经有大量数据,修改整理方式可能会导致数据错乱,如果不确定,建议在修改前备份数据库。
检查并修改 DedeCMS 系统配置
DedeCMS 后台有一个核心配置文件,它定义了系统的默认编码。
- 通过 FTP 或文件管理器,进入您的网站根目录。
- 找到并打开
data/common.inc.php文件。 - 找到下面这一行代码:
$cfg_soft_lang = 'utf-8';
- 如果您想使用 GBK 编码(不推荐,除非有特殊需求),就改成
$cfg_soft_lang = 'gbk';。 - 强烈建议统一使用
utf-8。
- 如果您想使用 GBK 编码(不推荐,除非有特殊需求),就改成
- 保存文件。
检查并修改模板文件编码
这是最直接导致前台页面乱码的原因。
-
检查模板文件:
(图片来源网络,侵删)- 进入
dede/templets/目录,这里的文件是后台模板,一般影响不大,但最好也统一为 UTF-8。 - 进入
templets/目录(网站根目录下),这里是您的前台模板文件,请用支持编码切换的编辑器(如 VS Code, Sublime Text, Notepad++)打开您的模板文件(如index.htm,article_article.htm等)。 - 在编辑器右下角,查看当前文件的编码格式,如果不是
UTF-8,请将其转换为UTF-8编码(注意:不要选成UTF-8 with BOM,BOM 头可能会导致 PHP 程序出错)。 - 保存所有模板文件。
- 进入
-
检查核心函数文件:
- 打开
/include/dedetemplate.class.php文件。 - 找到
let $t = new DedeTemplate($this->templateDir);这一行。 - 在它后面添加一行代码:
$t->SetTemplate($this->templateDir.'/'.$this->templateFile, 'utf-8'); - 完整代码块示例:
// 在 dedetemplate.class.php 中找到类似这样的代码块 let $t = new DedeTemplate($this->templateDir); $t->SetTemplate($this->templateDir.'/'.$this->templateFile, 'utf-8'); // 添加这一行 let $this->templateFile = $file; let $this->templetsDir = $this->templateDir.'/'.$file;
- 这个操作是强制 DedeCMS 在编译模板时使用 UTF-8 编码,非常关键。
- 打开
重新生成网站
完成以上修改后,必须重新生成网站,让新的设置生效。
- 登录 DedeCMS 后台。
- 进入“系统” -> “一键更新网站”。
- 勾选所有选项,特别是“更新HTML”和“更新主页”,然后点击“开始更新”。
- 等待更新完成,这个过程会根据您网站的大小和服务器性能而耗时。
检查 HTML 文件头声明
这是告诉浏览器使用什么编码来解析网页的“指令”。
- 打开任意一个由 DedeCMS 生成的 HTML 文件(比如网站首页
index.html)。 - 在文件的最顶部,找到
<head>标签,检查里面是否有类似这样的代码:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
charset=utf-8必须和您前面所有步骤设置的编码一致。- 如果没有,请手动添加。
- 如果存在,请确保它的值是正确的。
检查服务器配置(.htaccess 文件)
在极少数情况下,服务器配置可能会覆盖您的页面编码设置。
- 在网站根目录下,查看是否存在
.htaccess文件(Linux 主机)或web.config文件(Windows 主机)。 - 如果存在
.htaccess文件,检查是否有AddDefaultCharset指令。- 如果有
AddDefaultCharset GBK,请将其修改为AddDefaultCharset UTF-8或直接注释掉(在行首加 )。 - 如果没有,可以添加一行
AddDefaultCharset UTF-8来强制整个网站使用 UTF-8 编码。
- 如果有
针对特定乱码的快速检查
-
后台乱码,前台正常:
- 99% 的情况是
data/common.inc.php文件中的$cfg_soft_lang设置错误,请检查步骤二。
- 99% 的情况是
-
前台乱码,后台正常:
- 99% 的情况是模板文件(
.htm)的编码不是 UTF-8,或者dedetemplate.class.php文件未修改,请检查步骤三。
- 99% 的情况是模板文件(
-
乱码(比如在后台修改文章标题,保存后显示为乱码):
- 这是最严重的情况,说明数据库的编码和程序设置的编码从一开始就不匹配,最好的解决方法是备份数据库,然后清空数据库,按照步骤一重新设置数据库编码,再重新导入数据,如果数据很重要且无法清空,建议联系专业技术人员处理。
总结与最佳实践
| 问题区域 | 核心检查点 | 推荐设置 |
|---|---|---|
| 数据库 | 整理方式 | utf8mb4_unicode_ci |
| 系统配置 | data/common.inc.php |
$cfg_soft_lang = 'utf-8'; |
| 模板文件 | 文件编码 | UTF-8 (无 BOM) |
| 核心文件 | include/dedetemplate.class.php |
添加 $t->SetTemplate(..., 'utf-8'); |
| 页面输出 | HTML 头部 | <meta charset="utf-8"> |
| 服务器 | .htaccess |
AddDefaultCharset UTF-8 |
最佳实践:在搭建新站时,从一开始就将所有环节统一设置为 UTF-8,并养成良好的文件编码习惯,这样可以从根本上避免乱码问题。
希望以上详细的步骤能帮助您成功解决 DedeCMS 的乱码问题!如果按照所有步骤操作后问题依旧,请提供更具体的乱码截图和您网站所用的 DedeCMS 版本,以便进一步分析。
