昨天一位博友提示说网站不支持emoji表情,肉松之前真的没有关注过这个细节。经过测试,确实不支持。
Emoji是一种在Unicode位于u1F601-u1F64F区段的字符,超过了目前常用的UTF-8字符集的编码范围u0000-uFFFF。在MySQL中,UTF-8只支持最多3个字节,而emoji是4个字节。所以typecho默认不支持emoji表情,是由于数据库编码的问题,MYSQL在5.5.3以后的版本中加入了utf8mb4支持,所以核心点是我们只需要将默认的数据库编码utf8修改为utf8mb4即可。
结合以上,本站的修改过程还是相对繁琐了一些,因为使用的是2015年购买的阿里云的虚拟主机,php和数据库的版本都比较低,先在主机管理界面把php版本从5.4升级到typecho推荐的5.6,然后将mysql从5.1升级到了5.7。
先备份了数据库,升级时会清空数据库,导入MYSQL备份文件后就可以按网上的教程修改了。
教程基本上分了两步,一、修改数据库,二、修改typecho配置文件。
第一步、修改数据库编码
进入PhpMyadmin,选择您的数据库,操作--》整理--》选择utf8mb4_unicode_ci。因阿里的MDB没有此项,不需要修改此项。
第二步、修改数据库表编码
第1种方法是使用SQL语句修改,粘贴执行即可,方便快捷,需要注意这些表里要与自己的数据库表名一致。
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;
第2种方法是在phpmyadmin或者阿里的MDB界面手动修改表结构,字段选择utf8mb4
,校验选择utf8mb4_unicode_ci
。
第三步、修改数据库配置文件
找到网站根目录下的config.inc.php,使用文本编辑器打开;
大约在第60行, 将 'charset' => 'utf8'
修改为'charset' => 'utf8mb4'
;
修改好后保存文件。
此时typecho已经支持emoji表情了。
😀😁😂🤣😃😄😅😆😉😊😋😎😍😘🥰😗😙🥲😚☺️🙂🤗🤩🤔🤨😐😑😶😶🌫️🙄😏😣😥😮🤐😯😪😫🥱😴😌😛😜😝🤤😒😓😔😕🙃🤑😲☹️🙁😖😞😟😤😢😭😦😧😨😩🤯😬😮💨😰😱🥵🥶😳🤪😵😵💫🥴😠😡🤬😷🤒🤕🤢🤮🤧😇🥳🥸🥺🤠🤡🤥🤫🤭🧐🤓😈👿👹👺💀☠️👻👽👾🤖💩
改进的真快😌🎉💪💪
必须地 🥰🥰
嘿嘿,抢个沙发 i😎
欢迎到访😀😀
很多表情显示异常。
http://inews.gtimg.com/newsapp_ls/0/14592574010/0.jpg
估计可能是我浏览器的问题😵
我的正常显示的