WordPress 如何存储和显示 Emoji 以及如何优化

首先说明一下 Emoji 是文字,而不是图标,所以 Emoji 字符是 Unicode 字符集中一部分,特定形象的 Emoji 表情符号对应到特定的 Unicode 字节。

Emoji 存储需要四个字节

使用 Emoji 最大的问题是数据库存储不了,出错或者出现乱码,这是因为MySQL 的 UTF-8 字符集是存储不了 emoji 表情,因为 MySQL 中的 UTF-8 只用 3 个字节存储,所以存储不了表情,其实 MySQL 的 UTF-8 其实是 utf8mb3 的别名。

如果我们要存储 Emoji 表情,那么需要支持完整的 UTF-8 字符集,就是需要使用 4 个字节来存储字符,这个字符集名字叫 utf8mb4。

WordPress 如何存储和显示 Emoji

针对 Emoji,WordPress 在存储和显示这两方面做了处理,

WordPress 为了都能存储 Emoji,使用函数 wp_encode_emoji 函数将 Emoji 转换成 HTML 实体来存储,这样就不用担心数据库不支持 utf8mb4。

WordPress 为了都能显示 Emoji,使用函数 wp_staticize_emoji 函数将 Emoji 转换成图片显示,这样就不用担一些比较老旧的浏览器不显示 Emoji。

Cover image for How to Disable Emojis in WordPress

优化 WordPress Emoji 的处理

但是随着技术的发展,现在绝大部分服务器的 MySQL 数据库(5.5版本之后)都支持 utf8mb4 编码格式,所以无需将 Emoji 转换成 HTML 实体进行存储了,直接存储速度更快,节省了实体转换的时间消耗。

另外 WordPress 用于显示的 Emoji 的图片都是放在 http://s.w.org/images/core/emoji/ 资源下,令人尴尬的是,http://s.w.org/ 这个域名在国内访问不了的,这个功能反而成为了拖慢博客显示的原因了。

现在几乎所有的浏览器都能够显示 Emoji 了,所以我们完全可以禁用 WordPress 对 Emoji 的处理功能,比较简单,我已经整理好了,在当前主题的 functions.php 文件中添加如下代码即可:

remove_action('admin_print_scripts',	'print_emoji_detection_script');
remove_action('admin_print_styles',	'print_emoji_styles');

remove_action('wp_head',		'print_emoji_detection_script',	7);
remove_action('wp_print_styles',	'print_emoji_styles');

remove_action('embed_head',		'print_emoji_detection_script');

remove_filter('the_content_feed',	'wp_staticize_emoji');
remove_filter('comment_text_rss',	'wp_staticize_emoji');
remove_filter('wp_mail',		'wp_staticize_emoji_for_email');

add_filter( 'emoji_svg_url',		'__return_false' );

如果你不想自己改主题,禁用 WordPress 对 Emoji 的处理功能,我已经整合到 WPJAM Basic 插件中,现已免费提供下载,你只需要勾选下相应的选项就可以禁用了!


©我爱水煮鱼,本站推荐使用的主机:阿里云,国外主机建议使用BlueHost

本站长期承接 WordPress 优化建站业务,请联系微信:「chenduopapa」。