给 Xiuno BBS 添加 emoji 支持

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,测试成功。

如此一来,论坛就支持原生 emoji 了。但这样的 emoji 的样式,会随着平台(操作系统和浏览器)的变化而变化,而某些旧的平台甚至不能显示。但至少不会像原来那样被论坛自身转换为问号了。如何将原生 emoji 统一样式,如何提供 emoji 选择插入功能,则不在本文讨论范围内了。

若无特别说明,本文系原创,遵循 署名-非商业性使用 3.0 (CC BY-NC 3.0) 协议,转载文章请注明来自【闪星空间】,或链接上原文地址:http://shansing.com/read/458/

2 条评论

  1. AAA AAA

    是否可以修正一下修罗苹果手机上传图片歪的问题

    1. 可否具体描述一下?比如用的什么浏览器,什么编辑器,“歪”的症状是什么?

发表评论»

NO SPAMS! 不要发垃圾评论哦!

表情