采集乱码分两种最典型的类型,你先打开一篇乱码文章的后台编辑页/前端详情页,用肉眼快速判断:
默认ZBlogPHP5.2+安装的都是utf-8编码,但要手动检查3个核心配置/文件,确保全局统一:
不要用记事本打开核心文件,下载安装Notepad++(地址:https://notepad-plus-plus.org/downloads/v8.5.8/),右键选择“用Notepad++编辑”,检查以下4个关键文件:
在Notepad++顶部菜单栏依次点击:编码→转为UTF-8无BOM格式编码,然后按Ctrl+S保存。
用Notepad++打开主题目录的header.php,找到
标签内的内容,确保有且仅有下面这一行编码声明,放在所有标签的最前面: ```html ```如果有旧版的可以保留,但必须先有上面那行。
用Notepad++打开根目录/c_option.php,找到DB_CHARSET那一行,确保内容是下面这样的:
```php define('DB_CHARSET', 'utf8mb4'); ```如果是旧版的utf8,直接改成utf8mb4(注意是英文小写,没有多余空格),按Ctrl+S保存。
确定是采集源编码与网站不匹配后,有两种修复方式,优先选插件端修复(不用改数据库,适合新手),插件不行再选采集端修复(修改采集规则编码识别)。
这里以ZBlog官方免费插件“ZBlog采集助手(免费版)”为例(下载地址:https://app.zblogcn.com/?id=1796):
如果是自己写的PHP采集脚本,或者第三方插件不能自动识别,在获取到采集内容的原始代码后,添加下面这行强制转换代码:
```php // 自动识别源编码并转换为UTF-8无BOM $source_content = mb_convert_encoding($source_content, 'UTF-8', mb_detect_encoding($source_content, array('UTF-8', 'GBK', 'GB2312', 'BIG5', 'ASCII'), true)); // 去除BOM(部分源站会带) $source_content = preg_replace('/^\xEF\xBB\xBF/', '', $source_content); ```
注意:把代码中的$source_content替换成你脚本里实际的变量名。
这种情况99%是数据库表的字段没有使用utf8mb4字符集,因为默认的utf8字符集最多只能存3个字节的字符,而emoji、部分生僻字是4个字节。
操作步骤:
这种情况是数据库字段的长度不够,ZBlog默认的log_Content字段是TEXT类型(最多存65535个字节),如果采集的文章非常长,就会被截断,截断处刚好在多字节字符的中间就会乱码。
操作步骤:
同样修改对应表的字段字符集和长度:
如果不想重新采集,有两种批量修复方式:
下载地址:https://app.zblogcn.com/?id=1039,安装启用后:
登录phpMyAdmin,点击ZBlog数据库的“SQL”标签,输入下面的SQL语句,点击“执行”:
```sql -- 修复zbp_post表的4个核心字段 UPDATE zbp_post SET log_Title = CONVERT(CAST(CONVERT(log_Title USING latin1) AS BINARY) USING utf8mb4), log_Intro = CONVERT(CAST(CONVERT(log_Intro USING latin1) AS BINARY) USING utf8mb4), log_Content = CONVERT(CAST(CONVERT(log_Content USING latin1) AS BINARY) USING utf8mb4), log_Meta = CONVERT(CAST(CONVERT(log_Meta USING latin1) AS BINARY) USING utf8mb4); -- 修复zbp_tag表的2个字段 UPDATE zbp_tag SET tag_Name = CONVERT(CAST(CONVERT(tag_Name USING latin1) AS BINARY) USING utf8mb4), tag_Meta = CONVERT(CAST(CONVERT(tag_Meta USING latin1) AS BINARY) USING utf8mb4); -- 修复zbp_category表的3个字段 UPDATE zbp_category SET cate_Name = CONVERT(CAST(CONVERT(cate_Name USING latin1) AS BINARY) USING utf8mb4), cate_Intro = CONVERT(CAST(CONVERT(cate_Intro USING latin1) AS BINARY) USING utf8mb4), cate_Meta = CONVERT(CAST(CONVERT(cate_Meta USING latin1) AS BINARY) USING utf8mb4); ```注意:如果你的ZBlog数据库表前缀不是zbp_,要改成你实际的前缀(比如myblog_post)。
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图