小丁的屋舍
让Typecho/Xiuno支持 emoji 的显示
2021-07-10
查看标签
1476次浏览

刚开始运营像素工坊的时候被XiunoBBS狠狠的坑了一次,兴冲冲的写了一篇大肠文(大雾),只因为中间用了几个 emoji 分享心情, 提交后发现用 emoji 之后的内容全没了!全没了!啊!没了!啊!!后来发现Typecho也是一样的特性,直接无语子啊???

后来无奈努力回忆着又草草写了篇没鸟用的文章就洗洗睡了,当时就下定决心一定要解决这个问题(并没有,其实是今天太闲→_→),于是在隔了半年年的今天终于开始。。。。?

其实也不能说 Typecho与 XiunoBBS 不支持,毕竟两款不同开发者做出来的应用,遇到同样的 BUG 肯定不是程序原因??

之前用的是 UTF-8 的编码,宝塔面板建新网站也是 UTF-8 的编码,在 MySQL 中,UTF-8 只支持最多 3 个字节,而 emoji 是 4 个字节,所以就出现了像上面那种惨绝人寰的问题。

知道问题所在以后就好办多了:

  • 修改数据库 charset 为 utf8mb4:
alter table typecho_comments convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table typecho_contents convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table typecho_fields convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table typecho_metas convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table typecho_options convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table typecho_relationships convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table typecho_users convert to character set utf8mb4 collate utf8mb4_unicode_ci;
  • 修改 Typecho 配置文件中数据库定义参数中的 charset 为 utf8mb4:
$db->addServer(array (
    'host'      =>  localhost,
    'user'      =>  'me',
    'password'  =>  'my_password',
    'charset'   =>  'utf8mb4', //修改这一行
    'port'      =>  3306,
    'database'  =>  '蛤?'
), Typecho_Db::READ | Typecho_Db::WRITE);

搞定?~

啊对了,对于不支持 emoji 的设备上大概会显示为框框吧,但至少不会像之前直接毫无人性的砍掉 (Mysql 的锅) emoji 之后的内容要好上太多了。。