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

科技1年前 (2023)发布 iowen
172 0 0

首先说明一下 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。

优化 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 的处理功能,我已经整合到  插件中,现已免费提供下载,你只需要勾选下相应的选项就可以禁用了!

最后再分享一个好玩的技巧:。

推荐阅读:






点击卡片关注「WordPress果酱」 
每天分享 WordPress 使用技巧 

⏬⏬ 下载 WPJAM Basic 请点击阅读原文

© 版权声明

相关文章

暂无评论

暂无评论...