问题的根源几乎可以肯定在于 字符编码的不一致,UTF-8只是一个标准,但网站在各个环节(文件保存、数据库、网页输出)都必须严格统一使用它,任何一个环节出错都会导致乱码。

核心排查思路:
检查所有与编码相关的环节,确保它们全部都是“UTF-8 无 BOM”。
第一步:检查网页本身(最常见的原因)
这是最容易出错的地方,虽然你保存文件时选择了UTF-8,但如果保存方式不当,文件开头会多出几个不可见的字符,这就是所谓的 BOM (Byte Order Mark),它会严重干扰PHP的输出,导致乱码。
解决方案:
- 使用专业代码编辑器(如 VS Code, Sublime Text, Notepad++)打开你的首页模板文件
index.htm。 - 检查并转换编码格式:
- 在 VS Code 中:
- 打开右下角的状态栏,查看当前的编码格式。
- 如果显示的是
UTF-8 with BOM,请点击它,在弹出的菜单中选择 “通过编码保存...” (Save with Encoding)。 - 然后选择
UTF-8(不带BOM的版本)。
- 在 Notepad++ 中:
- 点击菜单栏的 “格式” (Format)。
- 查看当前是否为 “UTF-8 无BOM”,如果不是,点击它进行转换,如果已经是,先切换成
ANSI,再切回UTF-8 无BOM,这样可以确保清除BOM。
- 在 VS Code 中:
- 保存修改,然后刷新网站首页查看。
注意: 除了 index.htm,通常还需要检查并转换以下关键模板文件:

head.htm(头部模板,定义了<head>和<meta charset="UTF-8">)footer.htm(底部模板)article_article.htm(文章内容页模板)list_article.htm(文章列表页模板)
第二步:检查数据库连接字符集
即使你的模板文件是UTF-8,如果数据库连接的不是UTF-8,从数据库里读出来的数据(如文章标题、内容)就会是乱码。
解决方案:
- 登录你的网站后台,进入 “系统” -> “系统基本参数” -> “核心设置”。
- 找到 “网站编码” 这一项,确保它的值是
UTF-8。 - 这一步至关重要,它告诉DedeCMS系统,整个网站都应使用UTF-8编码。
第三步:检查数据库本身的字符集
这是最底层的设置,如果数据库、数据表的字符集不是 utf8 或 utf8mb4,那么数据从源头上就是错误的。
解决方案:

你需要登录你的数据库管理工具(如 phpMyAdmin)进行检查。
-
检查数据库字符集:
- 在 phpMyAdmin 左侧选择你的数据库名(通常是
dedecms或你自定义的)。 - 在右侧的“操作”或“数据库信息”中,查看数据库的 “整理” (Collation) 值,它应该以
utf8_开头,utf8_general_ci或utf8mb4_general_ci,如果不是,你需要备份数据,然后修改数据库的字符集。
- 在 phpMyAdmin 左侧选择你的数据库名(通常是
-
检查数据表字符集:
- 在左侧展开你的数据库,查看所有数据表。
- 重点检查
dede_archives(文章主表),dede_arctype(栏目表),dede_addonarticle(文章附加表) 等核心表的“整理”值,同样,它们也应该以utf8_开头。 - 如果不是,你需要选中这些表,在“操作”中选择“更改”,然后将字符集修改为
utf8mb4_unicode_ci(推荐,支持Emoji) 或utf8_general_ci。
重要提示: 修改数据库字符集是一个高风险操作,务必先完整备份数据库!
第四步:检查PHP输出前的BOM头
织梦的核心PHP文件本身也可能被误保存为带BOM的格式,导致在 header() 函数发送HTTP头之前就已经输出了空格或BOM字符,从而引发乱码。
解决方案:
- 使用第一步中的代码编辑器,打开织梦的核心文件。
- 重点检查以下文件,确保它们是 “UTF-8 无 BOM” 格式:
/include/common.inc.php(这是最核心的一个文件,必须在最顶部开始,不能有任何输出)/include/dedesql.class.php/member/config.php/dede/config.php/dede/login.php
第五步:检查服务器环境配置
在某些情况下,服务器的默认配置也可能覆盖你的设置。
解决方案:
-
检查
.htaccess文件(如果使用Apache服务器):- 确保你的网站根目录下有一个
.htaccess文件。 - 在文件中添加或修改以下行,强制服务器使用UTF-8编码:
AddDefaultCharset UTF-8
- 如果已有
AddDefaultCharset GBK或其他,请将其改为UTF-8。
- 确保你的网站根目录下有一个
-
检查PHP配置(
php.ini):- 这个文件通常需要服务器管理员权限才能修改,你可以联系你的主机商。
- 确保其中的
default_charset设置为UTF-8。default_charset = "UTF-8"
第六步:检查浏览器缓存
你修改了文件,但浏览器还在显示旧的缓存页面,造成“乱码问题仍未解决”的假象。
解决方案:
- 在浏览器中按
Ctrl + F5(Windows) 或Cmd + Shift + R(Mac) 进行强制刷新。 - 或者打开浏览器的“无痕/隐私模式”访问网站,这样可以确保不加载任何缓存。
总结与排查顺序建议
遇到UTF-8乱码,请按照以下顺序进行排查,90%的问题都能在前三步解决:
- 【最优先】 用专业编辑器检查并转换
index.htm等模板文件为 “UTF-8 无 BOM”。 - 【后台设置】 检查DedeCMS后台 “系统基本参数” -> “网站编码” 是否为
UTF-8。 - 【数据库】 登录 phpMyAdmin,检查 数据库和数据表 的“整理”值是否为
utf8_...。 - 【核心文件】 检查
/include/common.inc.php等核心PHP文件是否为 “UTF-8 无 BOM”。 - 【服务器配置】 检查
.htaccess和php.ini的字符集设置。 - 【最后一步】 强制刷新浏览器或清除缓存。
如果以上所有步骤都尝试过问题依旧存在,那可能是某个插件或模块的代码存在编码问题,可以尝试暂时禁用所有插件再测试,希望这些步骤能帮你解决问题!
