让Typecho/Xiuno支持 emoji 的显示
刚开始运营像素工坊的时候被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 之后的内容要好上太多了。。