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 行附近)。

目录
相关文章
|
20天前
|
JSON PHP 开发者
Xiuno BBS 审计之问题3:未初始化变量访问抛错
本文揭示Xiuno BBS 4.0.4在PHP 8.0+下的兼容性问题:多处未判空即访问数组键,导致Warning或TypeError致命错误。涵盖user、thread、post等核心路由及index入口,影响日志、白屏与插件兼容。XIUNOX已修复,供开发者参考升级。
71 2
|
20天前
|
缓存 前端开发 测试技术
Xiuno BBS 审计之问题:全局变量滥用,状态混乱
本文揭示Xiuno BBS 4.0.4中131处global变量滥用问题:状态共享混乱、函数副作用不可控、单元测试难、并发易串态、重构成本高。XIUNOX版已通过依赖注入与单例封装优化修复,供二次开发参考。(239字)
117 2
|
20天前
|
缓存 NoSQL 关系型数据库
Xiuno BBS 审计之问题:缓存默认走 MySQL,性能风险
本文揭示Xiuno BBS 4.0.4默认缓存配置为MySQL表缓存的严重架构缺陷:缓存层退化为数据库读写,反而加重负载,且业务代码被迫感知缓存实现。XIUNOX版本已修复,默认改用YAC/APC内存缓存,并解耦缓存逻辑。供开发者参考优化。
53 1
|
20天前
|
关系型数据库 MySQL 数据库连接
Xiuno BBS 审计之问题1:mysql_* 扩展移除,PHP8 致命错误
Xiuno BBS 4.0.4 因大量使用已废弃的 `mysql_*` 函数,在 PHP 7.0+(尤其是 PHP 8)下触发致命错误,导致数据库连接、安装等功能完全失效。本文详析问题根源、源码证据及修复方案,供开发者升级或维护参考。(239字)
59 0
|
20天前
|
Kubernetes 应用服务中间件 nginx
Kubernetes (K8s) 从入门到实战:命名空间、Pod、Controller、Service,图文并茂
本文是K8s初学者的实战笔记,系统讲解命名空间(隔离资源、环境划分、权限控制)、Pod(最小调度单元、多容器、标签、生命周期、探针、资源限制)、控制器(Deployment灰度发布/回滚、StatefulSet/Job/DaemonSet)及Service(ClusterIP/NodePort、负载均衡、多端口)等核心概念与操作,附带丰富命令示例和原理剖析。
Kubernetes (K8s) 从入门到实战:命名空间、Pod、Controller、Service,图文并茂
|
20天前
|
开发工具 Swift git
DeepSeek Harness 插件推荐:4 款开源神器让写代码直接起飞
DeepSeek Harness 插件推荐:ModLens 视觉、Web UI 全家桶、Mac 原生与 GenUI 渲染,4 款开源插件给纯文本模型补齐短板。
2144 7
DeepSeek Harness 插件推荐:4 款开源神器让写代码直接起飞
|
20天前
|
人工智能 算法 API
【第二部分:大模型应用开发基础】9. RAG 是什么,它与 Agent 有什么关系?——从知识库问答到 Agentic RAG
RAG 通过文档解析、切分、Embedding、混合检索、Rerank 与引用机制,让大模型在回答问题时能够按需获取企业知识,而不是依赖训练数据“记住一切”。文章进一步介绍 RAG 如何从固定的检索增强生成流程演进到 Agentic RAG:由 Agent 判断是否需要检索、如何规划 Query、证据是否充分,并在必要时继续改写和多轮检索。同时梳理 RAG、Memory、Tool 与 Agent 的边界,强调知识库问答系统并不等同于 Agent,RAG 只是 Agent 获取外部知识的一种能力。
189 2
|
20天前
|
Java Linux 开发工具
IDEA官网下载2026|IDEA社区版安装+使用图文步骤
IntelliJ IDEA(简称IDEA)是JetBrains推出的主流Java集成开发环境,集代码编写、编译、调试、版本控制等功能于一体。提供免费社区版(支持Java/Kotlin/Maven/Gradle等)和付费旗舰版(增强Spring、数据库、前端等支持),开箱即用、智能提示强,适合学习与日常开发。
|
21天前
|
JavaScript API 开发者
DeepSeek Harness 刚发布,先让它做了个网页
DeepSeek Harness(DSH)是DeepSeek开源的Agent执行框架,践行“Model + Harness = Agent”理念。v0.1开发者预览版发布次日即实测成功:一行命令`npx @deepseek-ai/dsh web`启动,自动完成搜索、规划、写HTML、本地验证全流程,支持插件扩展与完整执行轨迹追踪。(239字)
481 1
DeepSeek Harness 刚发布,先让它做了个网页
|
20天前
|
人工智能 缓存 安全
通义千问Qwen3.8‑Max深度功能解读:原生多模态、Agent实战与API调用教程
大模型产业已经从简单问答时代迈入复杂任务自主执行的新阶段,行业不再只追求单次对话的流畅度,更加看重模型处理长链路任务、自主规划纠错、工程级代码交付、多模态深度解析以及专业领域复杂推理的综合实力。Qwen3.8‑Max作为千问系列的旗舰基座模型,采用稀疏混合专家MoE架构,总参数量达到2.4万亿,单Token激活参数约95B,兼顾超高能力上限与实际推理效率,把长周期智能体执行、百万级超长上下文、原生多模态理解、工程级自主编码、专业领域深度推理等能力整合在同一基座当中,面向软件研发团队、科研机构、企业业务系统开发者、AI应用服务商提供底层能力支撑。在众多权威第三方评测榜单当中,该模型取得十分亮眼的
649 1