核心概念解析
我们用最简单的话理解这三个概念:

(图片来源网络,侵删)
-
GBK vs. UTF-8:字符编码的“方言”
- GBK:是中国的国家标准编码,主要收录了汉字和符号,它是一个双字节编码,意味着一个中文字符通常占用2个字节,它主要在中国大陆地区使用,可以覆盖绝大部分常用汉字。
- UTF-8:是 Unicode(万国码)的一种实现方式,它是一种变长编码,英文字符(如 A, B, C)占用1个字节,中文字符通常占用3个字节,UTF-8 的优势是国际化,可以表示世界上几乎所有的字符和符号,是当前Web开发的主流和推荐标准。
简单比喻:GBK 就像只在中国通行的“方言”,而 UTF-8 就像是全球通用的“普通话”,如果你的网站只面向国内用户,GBK 够用;如果你的网站有国际用户,或者未来有扩展需求,UTF-8 是不二之选。
-
织梦CMS (DedeCMS):网站的“身体”
- 织梦是一款非常流行的 PHP 开源的网站管理系统,它负责网站的内容管理、模板渲染、数据存储等所有功能。
- 织梦CMS 本身是代码,这些代码文件(
.php)和模板文件(.htm)本身也需要用一种编码来保存,它生成的 HTML 页面、存储的数据库数据,也都涉及到编码问题。
三者关系:织梦CMS 是一个平台,而 GBK 和 UTF-8 是这个平台在处理文字时可以采用的两种不同“规则”(编码),织梦CMS 最初版本是基于 GBK 编码开发的,后来才推出了 UTF-8 版本。

(图片来源网络,侵删)
为什么在织梦CMS中会遇到编码问题?
编码问题通常出现在以下几种情况,被称为“乱码”:
-
现象1:页面显示乱码
- 原因:浏览器用 A 编码(如 UTF-8)去解析一个用 B 编码(如 GBK)保存或生成的网页。
- 表现:中文显示成一堆看不懂的符号,如 或 。
-
现象2:后台保存内容乱码
- 原因:网站后台(PHP程序)和数据库之间的编码不一致,程序用 UTF-8 写入,但数据库字段是 GBK,导致数据无法正确存储。
-
现象3:调用数据乱码
(图片来源网络,侵删)- 原因:数据在数据库里是正确的(比如是 GBK),但在被 PHP 读取并输出到页面时,没有进行正确的编码转换。
织梦CMS 的 GBK 和 UTF-8 版本
织梦官方针对这两种编码,提供了不同版本的程序:
-
GBK 版本
- 特点:
- 程序文件本身是 GBK 编码。
- 默认数据库表、字段是
gbk或gbk_chinese_ci。 - 默认页面输出
Content-Type: text/html; charset=gbk。
- 适用场景:面向国内用户的传统网站,服务器环境配置较老,或者从老旧的GBK网站迁移而来。
- 特点:
-
UTF-8 版本
- 特点:
- 程序文件本身是 UTF-8 编码(通常是无 BOM 头的 UTF-8)。
- 默认数据库表、字段是
utf8或utf8_general_ci。(注意:新版本推荐utf8mb4以支持 emoji 表情)。 - 默认页面输出
Content-Type: text/html; charset=utf-8。
- 适用场景:新建网站,有国际需求,或者网站内容包含多语言、特殊符号等。
- 特点:
实战操作:如何检查和处理编码问题?
检查网站当前编码
- 页面编码:在浏览器中打开网站,右键 -> “查看网页源代码”,在
<head>标签里找到charset。<meta charset="gbk"> <!-- 或 utf-8 -->
- 数据库编码:登录你的数据库管理工具(如 phpMyAdmin),选择对应的数据库,查看“操作”或“详情”选项卡,可以看到数据库的“整理”规则(Collation),如
gbk_chinese_ci或utf8_general_ci。 - 文件编码:使用代码编辑器(如 VS Code, Sublime Text, Notepad++)打开织梦的核心文件,如
include/common.inc.php或任意一个模板文件,编辑器底部会显示文件的编码格式。
统一编码是解决乱码的根本
最理想的状态是:文件编码 + 数据库编码 + 页面输出编码 三者完全一致。
以 UTF-8 为例,确保以下三点统一:
-
文件编码为 UTF-8:
- 所有
.php程序文件。 - 所有
.htm模板文件。 - 配置文件
data/common.inc.php中的cfg_soft_lang设置为'utf-8'。
- 所有
-
数据库编码为 UTF-8:
- 数据库的整理规则为
utf8mb4_general_ci(推荐) 或utf8_general_ci。 - 所有数据表的整理规则也为 UTF-8。
- 关键字段,如
dede_archives(文章表) 的title、body等字段,其整理规则也必须是 UTF-8。
- 数据库的整理规则为
-
页面输出为 UTF-8:
- 模板文件的
<head>部分必须有<meta charset="utf-8">。 - 程序在输出 HTML 头部时,会设置
header('Content-Type: text/html; charset=utf-8');,这个通常由include/dedehtmlhead.php文件控制。
- 模板文件的
从 GBK 转换到 UTF-8(常见需求)
如果你有一个旧的 GBK 网站想升级到 UTF-8,官方提供了转换工具,但强烈建议在转换前完整备份网站和数据库。
官方转换步骤(以 DedeCMS V5.7 为例):
- 备份:备份整个网站程序和数据库。
- 上传新程序:下载织梦 UTF-8 版本,并上传到你的服务器,覆盖掉旧文件(注意:只覆盖程序文件,不要覆盖
data目录,除非你知道你在做什么)。 - 运行转换程序:访问你的网站后台地址,后面加上
/utf8.php,http://www.yoursite.com/dede/utf8.php。 - 按提示操作:转换程序会自动检测你的 GBK 编码环境,并引导你完成数据库的转换过程,这个过程可能会比较慢,请耐心等待。
- 检查:转换完成后,登录后台,检查各个栏目、文章、标签等是否正常显示,访问前台页面,确认没有乱码。
注意:官方转换工具并非100%完美,对于一些高度定制或修改过的模板,可能需要手动调整。
总结与最佳实践
| 特性 | GBK | UTF-8 |
|---|---|---|
| 字符范围 | 主要支持中文,兼容性有限 | 支持全球所有语言和符号 |
| 存储空间 | 中文占2字节 | 中文通常占3字节 |
| 国际化 | 不支持 | 完全支持 |
| 织梦版本 | 早期主流,仍有大量使用 | 当前推荐,新建网站首选 |
| 性能 | 在纯中文环境下,数据量小,I/O 稍快 | 数据量稍大,但现代服务器性能差异可忽略 |
给你的建议:
- 新建网站:毫不犹豫地选择 UTF-8 版本,这是行业标准,能避免未来绝大多数编码相关的麻烦。
- 维护旧网站:
- 如果网站运行良好,没有乱码,且没有国际化需求,可以继续使用 GBK。
- 如果网站出现乱码,或者有新增多语言、特殊符号的需求,应考虑升级到 UTF-8。
- 日常维护:
- 永远不要手动修改数据库里的中文字符来“修复”乱码,这治标不治本。
- 修改模板或程序时,确保你的代码编辑器保存为正确的编码格式。
- 在使用第三方插件或模板时,注意其是否与你网站的编码版本匹配。
掌握 GBK 和 UTF-8 在织梦CMS中的区别和处理方法,是每个织梦开发者必备的技能,核心思想就是“统一”,让数据在产生、存储、传输和展示的每一个环节都使用同一种“语言”(编码)。
