记录分享邓杰律师从事网络技术工作点点滴滴。
编者按:在宝塔面板(v11.4.0) + CentOS 7.6 +MySQL 5.7.43+PHP 5.6.40环境下,将 Phpcms V9.6.3网站程序和对应的MySQL 数据库从 GBK编码 转为 UTF-8 编码。具体方法和实现步骤如下。
如何将 Phpcms V9.6.3的GBK版本转换为UTF-8 版本?
(操作之前再三提醒您,务必做好网站数据备份)
在宝塔面板(v11.4.0) + CentOS 7.6 +MySQL 5.7.43+PHP 5.6.40环境下,将 Phpcms V9.6.3网站程序和对应的MySQL 数据库从 GBK编码 转为 UTF-8 编码。具体方法和实现步骤如下。
第一部分:将Phpcms V9.6.3网站程序由gbk转换为UTF-8。
可使用比如Notepad++等工具进行转换。建议安装BatchConvertGBKtoUTF8进行批量转换节约时间,这步比较简单,本处不再赘述。
第二部分:将Phpcms V9.6.3网站数据库由gbk转换为UTF-8。
步骤1:执行导出命令(将 GBK 数据库完整导出为.sql 文件,保留原编码格式,避免导出时乱码):
mysqldump -u root -p --default-character-set=gbk --databases nideshujukumingcheng --add-drop-database --add-drop-table > /www/backup/nideshujukumingcheng_gbk_backup.sql
步骤 2:将 GBK 编码的.sql 备份文件转码为 UTF-8 编码
# 转码命令:将GBK格式的sql文件转为UTF-8格式,生成新文件
iconv -f GBK -t UTF-8 /www/backup/nideshujukumingcheng_gbk_backup.sql > /www/backup/nideshujukumingcheng_utf8_backup.sql
步骤 3:修改 UTF-8 格式.sql 文件中的数据库编码配置
用notepad++
关键修改点(全局搜索对应内容,替换为 UTF-8 相关配置):
• 修改 1:数据库创建语句中的编码
找到:CREATE DATABASE /*!32312 IF NOT EXISTS*/ nideshujukumingcheng /*!40100 DEFAULT CHARACTER SET gbk */;
替换为:CREATE DATABASE /*!32312 IF NOT EXISTS*/ nideshujukumingcheng /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci */;
(注:MySQL 5.7 推荐使用utf8_general_ci排序规则,兼容 Phpcms V9.6.3)
• 修改 2:数据表连接 / 创建时的编码
找到文件顶部的SET NAMES gbk;(若有多处,全部替换)
替换为:SET NAMES utf8;
批量替换两处核心内容(全局搜索替换,而非仅修改数据库创建语句):
• 替换 1:数据表创建语句中的编码
查找全局所有:DEFAULT CHARACTER SET gbk(包含数据表的默认编码配置)
替换为:DEFAULT CHARACTER SET utf8
• 替换 2:数据表排序规则(可选,确保兼容)
查找全局所有:gbk_chinese_ci
替换为:utf8_general_ci
• 补充:若存在CHARSET=gbk(简写形式),也需替换为CHARSET=utf8
步骤 4:删除原 GBK 数据库,重建 UTF-8 编码的空数据库(可选,也可直接导入覆盖)
步骤 5:将 UTF-8 格式.sql 文件导入,重建 UTF-8 编码数据库
将修改后的 UTF-8 编码.sql 文件导入 MySQL,完成数据库重建,命令如下:
bash
运行
# 核心导入命令:指定连接编码为utf8,导入转码并修改后的sql文件
mysql -u root -p --default-character-set=utf8 < /www/backup/nideshujukumingcheng_utf8_backup.sql
步骤 6:修改 Phpcms 网站配置文件(匹配 UTF-8 编码)
数据库编码已改为 UTF-8,需同步修改 Phpcms 的数据库连接配置,避免网站访问乱码,步骤如下:
1. 宝塔面板「文件」模块,导航到 Phpcms 网站根目录(通常在/www/wwwroot/[你的域名]/)。
2. 找到配置文件config/database.php和system.php。
找到:'charset' => 'gbk',
替换为:'charset' => 'utf8',
3. 保存文件,完成配置修改。
步骤7:
查漏补缺调整解决字符等问题
以前是gbk,现在是utf8,由于两者字符不一样,转换后与字符数相关的逻辑要做相应调整。比如。您要到后台模型管理-文章模型-字段管理中,调整与字符长度相关的值以适配你的网站,此外,你还需解决截取标题或者文章内容产生问号?
替换 PHPCMS 的 str_cut 函数(彻底解决)
编辑 /phpcms/libs/functions/global.func.php,找到 str_cut 函数,替换为 UTF-8 安全版本:
替换为以下代码:
/**
* 字符截取 支持UTF8/GBK
* @param $string
* @param $length
* @param $dot
*/
function str_cut($str, $length, $suffix = '...') {
if (strlen($str) <= $length) return $str;
// 强制按 UTF-8 处理
$str = iconv('UTF-8', 'UTF-8//IGNORE', $str);
$tmp_str = mb_substr($str, 0, $length, 'UTF-8');
// 如果截断后长度不足(说明原字符串含多字节),再加 suffix
if (mb_strlen($str, 'UTF-8') > $length) {
$tmp_str .= $suffix;
}
return $tmp_str;
}
以上是邓杰律师实战转换分享,如仍有不清楚的可加微信沟通。

专注执业领域事务
全力办理委托事项
扎实维护合法权益

邓杰律师电话:13715198118
请输入您的联系电话,座机请加区号
