关于typecho博客文章中粘贴emoji导致的bug的研究
最近我节选一位大佬的博客LiNPX的时候,发生了文章一半之后就自动消失的问题。
下图是我复制的原文。
直接复制到iA Writer中进行一些格式化工作,如下图。
然后将格式化后的全文复制粘贴到博客后台的发布窗口,如下图。
然后成功发布。
发布后的结果如下图。
注释:typecho文章结尾会自动添加版权声明,在截图里作为文章真的结尾了的证据。
可以看到,文章后半段神秘消失了。
然后到文章编辑界面查看,发现本文的后半段确确实实是消失了。
现在从iA Writer重新复制,然后删掉第一个emoji,重新发布本文试试看。
中间过程跳过,直接看结果。
可以看到,文章的中间,原来来两个emoji之间的部分回来了,但是第二个emoji之后的内容确实是消失了。
现在删掉第二个emoji,重新发布本文试试看。
可以看到,文章现在完完整整的发布了。
那么可以得出结论,复制来的emoji确实会导致typecho自动删除一部分文章内容的问题发生。
那么,我亲手写的emoji会不会也出现同样的问题呢?
现在到文章编辑器中的中间位置添加任意一个emoji,例如太阳的emoji。
现在我们来发布文章看看结果吧。
注释:因为文章太短,页面没有给予显示右侧目录。
可以看到,emoji所在位置之后的文章,再次神秘消失了。
那么可以得出结论:
emoji会导致typecho自动删除一部分文章内容的问题发生。
更新-解决方案
本部分内容节选自使Typecho支持最流行的Emoji表情😍,原始内容可点击链接查看。
修改数据库编码
主机壳->主机管理->数据库管理->phpMyAdmin->操作->排序规则->utf8mb4_unicode_ci
->执行
修改数据库表编码
还是在phpMyAdmin。
sql->粘贴以下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;
修改数据库配置文件
网站根目录数据库配置文件config.inc.php。修改字符集为utf8mb4
。
在本地修改完成之后通过ftp同步/上传到服务器。
$db->addServer(array (
'host' => localhost,
'user' => 'youruser',
'password' => 'yourpassword',
'charset' => 'utf8mb4', //修改这一行
'port' => 3306,
'database' => 'yourdatabase'
), Typecho_Db::READ | Typecho_Db::WRITE);
修改成功之后
就可以肆无忌惮的放emoji了😂。