关于typecho博客文章中粘贴emoji导致的bug的研究
in 网站建造技术日志 with 5 comments and 6627 read

关于typecho博客文章中粘贴emoji导致的bug的研究

in 网站建造技术日志 and 6628 read

最近我节选一位大佬的博客LiNPX的时候,发生了文章一半之后就自动消失的问题。

下图是我复制的原文。

原文

直接复制到iA Writer中进行一些格式化工作,如下图。

处理

然后将格式化后的全文复制粘贴到博客后台的发布窗口,如下图。

编辑

然后成功发布。

发布成功

发布后的结果如下图。

注释:typecho文章结尾会自动添加版权声明,在截图里作为文章真的结尾了的证据。

第一次发布

可以看到,文章后半段神秘消失了。

然后到文章编辑界面查看,发现本文的后半段确确实实是消失了。

编辑

现在从iA Writer重新复制,然后删掉第一个emoji,重新发布本文试试看。

中间过程跳过,直接看结果。

第二次发布

可以看到,文章的中间,原来来两个emoji之间的部分回来了,但是第二个emoji之后的内容确实是消失了。

现在删掉第二个emoji,重新发布本文试试看。

第三次发布

可以看到,文章现在完完整整的发布了。

那么可以得出结论,复制来的emoji确实会导致typecho自动删除一部分文章内容的问题发生。


那么,我亲手写的emoji会不会也出现同样的问题呢?

现在到文章编辑器中的中间位置添加任意一个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;

sql语句输入框

修改数据库配置文件

网站根目录数据库配置文件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了😂。

Responses
  1. 有没有大佬曾经研究过相关问题的,十分希望可以给予我指导。

    Reply
  2. 数据库编码的问题,记得Typechodev有过说明好像,修改uft-8为utf8mb4即可,昨天遇到这个问题着实把我狠狠坑了一把
    另外你博客的日文很好看

    Reply
    1. @哈

      是的,我也已经按照这个方法解决了问题,并把方法更到了我的《从零开始建立一个Typecho博客》一文中?
      另外谢谢你的夸奖www阿里嘎多

      Reply
  3. 你好,我想咨询一下,我的主题的emoji直接居中了,不知道怎么回事!

    Reply
    1. @Rinvay

      我复制表情粘贴进去是可以的使用::这种方法是不行的!!:basketball:

      Reply