Xiuno BBS 审计之问题:缺 utf8mb4,Emoji 乱码

简介: 本文揭示Xiuno BBS 4.0.4因默认使用MySQL `utf8`(实为utf8mb3)导致Emoji及生僻字入库截断或报错的问题。XIUNOX已修复,含配置、建表、驱动全面升级至`utf8mb4`,供基于4.0.4二次开发的站长与开发者参考。(239字)

此文章为XIUNOX版本重构审计时发现问题,XIUNOX版本已优化修复此问题。分享出来方便后续想基于xiuno bbs4.0.4版本制作维护版本或插件模板等需求的开发者和站长参考。

现象
Xiuno BBS 4.0.4 默认使用 utf8(即 MySQL 的 utf8mb3)字符集连接数据库与建表,没有 utf8mb4 支持。MySQL 的 utf8 最多支持 3 字节字符,无法存储 Emoji 表情(如 😀、🎉)、部分生僻汉字(如 𠀇)、新增的 CJK 扩展区字符。这些字符入库时会被截断为 ? 或抛出 Incorrect string value 错误,导致帖子内容、用户名、签名等数据损坏。

源码证据
文件 xiunobbs_4.0.4/conf/conf.default.php 第 21、33 行:默认配置 charset 为 utf8(非 utf8mb4):

'mysql' => array (
'master' => array (
'host' => 'localhost',
'user' => 'root',
'password' => 'root',
'name' => 'test',
'tablepre' => 'bbs_',
'charset' => 'utf8', // <-- 应为 'utf8mb4'
'engine' => 'innodb',
),
'slaves' => array (),
),
'pdo_mysql' => array (
'master' => array (
...
'charset' => 'utf8', // <-- 应为 'utf8mb4'
'engine' => 'innodb',
),
'slaves' => array (),
),
文件 xiunobbs_4.0.4/xiunophp/db_mysql.class.php 第 57 行:连接后通过 SET names $charset 设置连接字符集,但 $charset 来自 conf(即 utf8):

// 第 57 行
$charset AND $this->query("SET names $charset, sql_mode=''", $link);
文件 xiunobbs_4.0.4/xiunophp/xiunophp.min.php 第 39 行(压缩版同逻辑):

$charset AND $this->query("SET names $charset, sql_mode=''", $link);
文件 xiunobbs_4.0.4/xiunophp/db_pdo_mysql.class.php 第 28 行(PDO 驱动同样受影响):

$charset AND $link->query("SET names $charset, sql_mode=''");
文件 xiunobbs_4.0.4/install/install.sql(建表脚本,共 17 张表全部使用 CHARSET=utf8,无任何 utf8mb4):

-- 第 32 行
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- 第 55, 92, 107, 134, 145, 166, 192, 200, 210, 229, 238, 255, 264, 273, 283, 301 行
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
全局搜索 utf8mb4 关键字:无任何匹配,证实整个项目(含配置、安装 SQL、迁移工具、驱动)从未支持 utf8mb4。

风险等级与结论
兼容障碍(数据损坏)。MySQL 8.0 起 utf8 默认别名指向 utf8mb3 并发出 deprecated 警告,未来版本将移除;现网用户在帖子/回复中粘贴 Emoji(iOS 输入法默认行为)会被静默截断。

危害:

帖子内容、帖子标题、用户名、用户签名中包含 Emoji 时,写入数据库被替换为 ? 或抛出 SQLSTATE[HY000]: General error: 1366 Incorrect string value,用户看到内容残缺。
bbs_post.message 是 LONGTEXT,存储用户长文,Emoji 截断后无任何错误提示,导致数据不可逆损坏。
MySQL 8.0+ 上 utf8 别名预警,未来 MySQL 版本(如 8.4+)可能彻底移除 utf8,届时建表失败。
与全文索引冲突:install.sql 第 32 行的 bbs_thread 表使用 MyISAM + FULLTEXT,若改为 utf8mb4,MyISAM 不支持 utf8mb4 全文索引,需同步改为 InnoDB + ngram。
修复建议:

conf/conf.default.php 第 21、33 行 'charset' => 'utf8' 改为 'charset' => 'utf8mb4'。
install/install.sql 全部 17 处 CHARSET=utf8 COLLATE=utf8_general_ci 改为 CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci(或 utf8mb4_unicode_ci)。
install/alter.sql 与各 tool/*_to_xn4.php 迁移工具补一条升级 SQL:ALTER TABLE bbs_xxx CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;。
将 bbs_thread 的 MyISAM FULLTEXT 改为 InnoDB + WITH PARSER ngram,否则 utf8mb4 下全文索引不可用。
同步修改 xiunophp.min.php(压缩版第 39 行附近)。

目录
相关文章
人工智能 缓存 前端开发
5855 14
人工智能 JavaScript 开发工具
2424 2
|
11天前
|
存储 弹性计算 缓存
阿里云服务器租赁费用:新版租赁收费标准及活动报价参考
本文更新了2026年阿里云全系列云服务器租赁活动报价,所有特惠资源均可前往阿里云活动中心选购,整体覆盖从个人入门到企业级高性能场景的全梯度需求。其中轻量应用服务器主打极致性价比,2核2G峰值200M带宽配置每日10点、15点限时抢购价仅38元/年,2核4G配置379元/年起;高性价比的经济型e实例、通用算力型u2i实例覆盖2核4G至4核32G全档位,适配开发测试与中小型企业业务;搭载英特尔至强6处理器的第九代c9i企业级实例算力较上代提升20%,支撑高并发生产环境,不同实例规格价差清晰,用户可根据自身业务负载与预算灵活选型。
2017 121
阿里云服务器租赁费用:新版租赁收费标准及活动报价参考
缓存 JavaScript Shell
1003 1
|
12天前
|
人工智能 程序员 API
Codex 接入 DeepSeek-V4-Flash:还能补上识图,提供两套方案
Codex 接入 DeepSeek-V4-Flash 怎么配?本文覆盖 CLI 与桌面端,再用 qwen3-vl-flash 补识图,两套方案可直接照做
1575 13
|
9天前
|
编解码 弹性计算 云计算
MiniMax-H3 视频生成模型 — 一键部署与使用指南
MiniMax-H3是MiniMax开源的33B全模态视频生成模型,支持文生视频、图生视频、参考生视频三种模式,原生输出2K/15秒带立体声音频视频,已原生适配ComfyUI,并可通过阿里云计算巢一键部署。(239字)
缓存 人工智能 算法
562 0
|
18天前
|
云安全 人工智能 运维
阿里云联动百位企业安全专家,共识Agent防御最佳实践
当Agent成为新员工,你的安全边界在哪里?
1979 10
阿里云联动百位企业安全专家,共识Agent防御最佳实践
|
10天前
|
人工智能 API 开发工具
2026 零基础本地 AI 漫剧完整实操教程(8G 笔记本显卡可用|附可直接复制命令与代码)
本方案提供完全离线、本地运行的漫剧全自动制作流程:RTX3060/4050 8G显卡即可驱动,涵盖Qwen写分镜→ComfyUI统一角色绘图→LTX2.3图生微动画→Qwen3-TTS本地配音→FFmpeg自动合成,全程无水印、免API、不限次。专为低显存优化,解决变脸、闪烁、爆内存三大痛点。(239字)