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。
优化 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美化登录界面Wordpress博客 2 年前 桃李Taoli
- SQLServer 错误 12304 在本机编译的存储过程外部使用内存优化表类型时,如果该类型对表的任意列使用 IDENTITY 属性,则该类型不受支持。 故障 处理 修复 支持远程
- MySQL中存储生日类型的最佳实践(mysql生日类型)
- 探究Oracle表的存储限制:空间大小有何限制?(oracle表多大空间)
- MySQL存储过程:开启创建之旅(mysql存储过程的创建)
- 在Oracle中存储BLOB 小试牛刀(oracle写blob)
- 深入了解Redis查看数据存储情况(查看redis存在的数据)
- Oracle位图链接高效率的数据存储和访问(oracle 位图链接)
- 使用Redis驱动类型实现更高效的数据存储(redis驱动类型)
- 存储Oracle L分区提升存储效率的不可或缺之特色(oracle l分区)
- 大数据量分页存储过程效率测试附测试代码与结果