Xiuno论坛添加emoji表情支持

Roogle 2019-4-20 8788

Xiuno BBS 是一款用 PHP 开发的开源 BBS 系统,简洁高效,鼓励二次开发。当前的最新版 4.0.4 中,默认是不支持 emoji 表情的。如果发帖时填入了 emoji 表情,发帖后将变成问号。这篇文章教你怎么解决这个问题。

其实,跟 Typecho 的情况一样,造成这个问题的原因是数据库的字符编码问题。MySQL 原本的 utf8 设计只为一个字符留出最多3个字节,但 emoji 这样特别的字符需要4个。于是改成 utf8mb4 编码即可。

utf8mb4 编码是 utf8 的超集,所以一般不必担心数据损毁的问题。但保险起见,建议你操作前还是对数据库进行备份。

确保你的 MySQL 版本在 5.5.3 及以上,然后对数据库执行一些 SQL 语句。你可以用诸如 phpMyAdmin 或 Adminer 之类的在线工具,也可以用 mysql 命令行工具或其他图形界面工具,进入相关的数据库后,再执行:

alter table bbs_attach convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_cache convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_forum convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_forum_access convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_friendlink convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_group convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_haya_favorite convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_kv convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_modlog convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_mypost convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_mythread convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_notice convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_post convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_post_like convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_post_search convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_post_update_log convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_queue convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_session convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_session_data convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_table_day convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_tag convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_tag_cate convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_tag_thread convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_thread convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_thread_digest convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_thread_search convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_thread_top convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table bbs_user convert to character set utf8mb4 collate utf8mb4_general_ci;
接着修改配置文件/conf/conf.php,将相应的uft8改为utf8mb4。对于 4.0.4 版本,这两个字符串分别在第 15 行和第 31 行。(实际上只要改一处就行了,但如果你不知道改哪一处,就都修改)改完后类似这样,注意charset的值:

      array (
        'host' => 'localhost',
        'user' => 'root',
        'password' => 'password',
        'name' => 'database',
        'tablepre' => 'bbs_',
        'charset' => 'utf8mb4',
        'engine' => 'innodb',
      )
去发个贴看看 emoji,测试成功。

混乱思考家,脑里全浆糊!
最新回复 (1)
  • 平均体 2022-8-5
    0 2
    问题不大~
    • ACG里世界
      3
          
返回
发新帖