maemo的风船

关于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了😂。

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »