当前位置:网站首页 >  攻略

ZBlogPHP各类采集场景内容乱码全排查零门槛修复全流程

时间:2026年05月27日 09:54:29 来源:易频IT社区

第一步:先确定核心乱码类型

采集乱码分两种最典型的类型,你先打开一篇乱码文章的后台编辑页/前端详情页,用肉眼快速判断:

  • 部分乱码:比如标题/摘要正常,正文有方框、问号、乱码方块,多是特殊字符编码丢失/数据库字段长度不足截断utf8mb4字符导致;
  • 全文乱码:标题、摘要、正文全是看不懂的符号,多是采集源编码与网站/数据库编码不匹配导致。

第二步:先修复ZBlog全局编码(不管哪种类型必做)

默认ZBlogPHP5.2+安装的都是utf-8编码,但要手动检查3个核心配置/文件,确保全局统一:

检查文件encoding声明

不要用记事本打开核心文件,下载安装Notepad++(地址:https://notepad-plus-plus.org/downloads/v8.5.8/),右键选择“用Notepad++编辑”,检查以下4个关键文件:

  • 根目录/c_system/function/c_system_common.php
  • 根目录/c_system/defines.php
  • 你当前使用的主题目录/header.php
  • 你当前使用的主题目录/footer.php

在Notepad++顶部菜单栏依次点击:编码→转为UTF-8无BOM格式编码,然后按Ctrl+S保存。

检查网站meta编码标签

用Notepad++打开主题目录的header.php,找到标签内的内容,确保有且仅有下面这一行编码声明,放在所有标签的最前面:

```html ```

如果有旧版的可以保留,但必须先有上面那行。

检查数据库配置文件

用Notepad++打开根目录/c_option.php,找到DB_CHARSET那一行,确保内容是下面这样的:

```php define('DB_CHARSET', 'utf8mb4'); ```

如果是旧版的utf8,直接改成utf8mb4(注意是英文小写,没有多余空格),按Ctrl+S保存。

第三步:全文乱码的针对性修复

确定是采集源编码与网站不匹配后,有两种修复方式,优先选插件端修复(不用改数据库,适合新手),插件不行再选采集端修复(修改采集规则编码识别)

方式1:ZBlog通用采集插件修复编码

这里以ZBlog官方免费插件“ZBlog采集助手(免费版)”为例(下载地址:https://app.zblogcn.com/?id=1796):

  1. 登录ZBlog后台,点击左侧菜单“应用中心→我的应用”,找到“ZBlog采集助手”点击“启用”;
  2. 点击左侧菜单“采集助手→采集规则管理”,找到你正在用的规则,点击右侧的“编辑”
  3. 找到“基础设置”区域,下拉找到“目标网站编码”选项;
    • 如果知道采集源的编码,直接选对应的(比如GBK、UTF-8);
    • 如果不知道,直接选“自动识别”
  4. 找到“内容处理”区域,务必勾选“强制将内容转为UTF-8无BOM”
  5. 点击底部的“保存规则”,重新采集之前的乱码内容即可。

方式2:手动修改采集代码的编码转换(适合自定义采集)

如果是自己写的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); ```

ZBlogPHP各类采集场景内容乱码全排查零门槛修复全流程

注意:把代码中的$source_content替换成你脚本里实际的变量名。

第四步:部分乱码的针对性修复

场景1:特殊字符(如emoji、生僻字)乱码/变成问号

这种情况99%是数据库表的字段没有使用utf8mb4字符集,因为默认的utf8字符集最多只能存3个字节的字符,而emoji、部分生僻字是4个字节。

操作步骤:

  1. 登录你的数据库管理工具(比如宝塔的phpMyAdmin、Navicat),找到ZBlog的数据库;
  2. 找到存储文章的核心表zbp_post,点击右侧的“结构”(phpMyAdmin)或“设计表”(Navicat);
  3. 找到这4个字段,逐个修改字符集和排序规则:
    • log_Title(标题)
    • log_Intro(摘要)
    • log_Content(正文)
    • log_Meta(元数据)
  4. 修改要求:字符集选utf8mb4,排序规则选utf8mb4_unicode_ci
  5. 点击“保存”(phpMyAdmin)或“应用”(Navicat);
  6. 重新采集之前的乱码内容即可。

场景2:部分段落/句子末尾乱码/截断

这种情况是数据库字段的长度不够,ZBlog默认的log_Content字段是TEXT类型(最多存65535个字节),如果采集的文章非常长,就会被截断,截断处刚好在多字节字符的中间就会乱码。

操作步骤:

  1. 同样登录数据库管理工具,找到zbp_post表的“结构”;
  2. 找到log_Content字段,点击“修改”;
  3. 把类型从TEXT改成MEDIUMTEXT(最多存16777215个字节,足够存百万字的文章),字符集和排序规则还是保持utf8mb4_unicode_ci;
  4. 点击“保存”/“应用”,重新采集即可。

场景3:标签、分类等非正文内容乱码

同样修改对应表的字段字符集和长度:

  • 标签存储表:zbp_tag,修改tag_Name、tag_Meta;
  • 分类存储表:zbp_category,修改cate_Name、cate_Intro、cate_Meta;

第五步:批量修复已采集的旧乱码文章(可选)

如果不想重新采集,有两种批量修复方式:

方式1:使用ZBlog“批量修改”插件(简单)

下载地址:https://app.zblogcn.com/?id=1039,安装启用后:

  1. 点击左侧菜单“批量修改”;
  2. 选择“文章”类型,点击“下一步”;
  3. 在“选择要修改的字段”里勾选“标题”“摘要”“正文”;
  4. 在“修改方式”里选择“PHP代码处理”,分别在标题、摘要、正文的代码框里输入:
```php // 放在标题/摘要代码框 $value = mb_convert_encoding($value, 'UTF-8', mb_detect_encoding($value, array('UTF-8', 'GBK', 'GB2312', 'BIG5', 'ASCII'), true)); $value = preg_replace('/^\xEF\xBB\xBF/', '', $value); ``` ```php // 放在正文代码框 $value = mb_convert_encoding($value, 'UTF-8', mb_detect_encoding($value, array('UTF-8', 'GBK', 'GB2312', 'BIG5', 'ASCII'), true)); $value = preg_replace('/^\xEF\xBB\xBF/', '', $value); // 可选:去除多余的空行 $value = preg_replace('/\s+/', ' ', $value); $value = str_replace(array(' ', "\r\n\r\n"), array(' ', "\r\n"), $value); ```
  1. 点击“下一步”,选择所有旧乱码文章,点击“执行修改”即可。

方式2:SQL批量修复(适合懂数据库的)

登录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号 网站地图