当前位置: 首页 > 编程笔记 >

3种方法轻松处理php开发中emoji表情的问题

公冶同
2023-03-14
本文向大家介绍3种方法轻松处理php开发中emoji表情的问题,包括了3种方法轻松处理php开发中emoji表情的问题的使用技巧和注意事项,需要的朋友参考一下

背景

做微信开发的时候就会发现,存储微信昵称必不可少。

可这万恶的微信支持emoji表情做昵称,这就有点蛋疼了

一般Mysql表设计时,都是用UTF8字符集的。把带有emoji的昵称字段往里面insert一下就没了,整个字段变成了空字符串。这是怎么回事呢?

原来是因为Mysql的utf8字符集是3字节的,而emoji是4字节,这样整个昵称就无法存储了。这要怎么办呢?我来介绍几种方法

解决方案

1、使用utf8mb4字符集

如果你的mysql版本>=5.5.3,你大可直接将utf8直接升级为utf8mb4字符集
这种4字节的utf8编码可完美兼容旧的3字节utf8字符集,并且可以直接存储emoji表情,是最好的解决方案
至于字节增大带来的性能损耗,我看过一些评测,几乎是可以忽略不计的

2、使用base64编码

如果你因为某些原因无法使用utf8mb4的话,你还可以使用base64来曲线救国
使用例如base64_encode之类的函数编码过后的emoji可以直接存储在utf8字节集的数据表中,取出时decode一下即可

3、干掉emoji表情

emoji表情是个麻烦的东西,即使你能存储,也不一定能完美显示。在iOS以外的平台上,例如PC或者android。如果你需要显示emoji,就得准备一大堆emoji图片并使用第三方前端类库才行。即便如此,还是可能因为emoji图片不够全而出现无法显示的情况在大多数业务场景下,emoji也不是非要不可的。我们可以适当地考虑干掉它,节约各种成本

经过一番苦苦的google,终于找到靠谱能用的代码:

// 过滤掉emoji表情
function filterEmoji($str)
{
 $str = preg_replace_callback(
   '/./u',
   function (array $match) {
    return strlen($match[0]) >= 4 ? '' : $match[0];
   },
   $str);

  return $str;
 }

以上就是为大家总结的PHP微信开发中涉及到emoji表情的几种处理方法,基本思想就是遍历字符串中的每个字符,如果该字符的长度为4个字节,就将其删除。希望大家喜欢!

 类似资料:
  • 本文向大家介绍浅谈JS中几种轻松处理'this'指向方式,包括了浅谈JS中几种轻松处理'this'指向方式的使用技巧和注意事项,需要的朋友参考一下 我喜欢在JS中更改函数执行上下文的指向,也称为 this 指向。 例如,咱们可以在类数组对象上使用数组方法: 另一方面,this 很难把握。 咱们经常会发现自己用的 this 指向不正确。下面的教你如何简单地将 this 绑定到所需的值。 在开始之前,

  • 本文向大家介绍轻松学习C#的异常处理,包括了轻松学习C#的异常处理的使用技巧和注意事项,需要的朋友参考一下        异常是程序运行中发生的错误,异常处理是程序设计的一部分。错误的出现并不总是编写应用程序者的原因,有时候应用程序会因为终端用户的操作发生错误。无论如何,在编写程序前,都应该预测应用程序和代码中出现的错误。一般良好的编程规范也会避免一些不必要的程序错误的出现。         在项

  • 本文向大家介绍MySQL插入emoji表情失败问题的解决方法,包括了MySQL插入emoji表情失败问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 前言 之前一直认为UTF-8是万能的字符集问题解决方案,直到最近遇到这个问题。最近在做新浪微博的爬虫, 在存库的时候发现只要保持emoji表情,就回抛出以下异常: 众所周知UTF-8是3个字节, 其中已经包括我们日常能见过的绝大多数字体. 但3

  • 本文向大家介绍Android中3种图片压缩处理方法,包括了Android中3种图片压缩处理方法的使用技巧和注意事项,需要的朋友参考一下 Android中图片的存在形式: 1:文件形式:二进制形式存在与硬盘中。 2:流的形式:二进制形式存在与内存中。 3:Bitmap的形式 三种形式的区别: 文件形式和流的形式:对图片体积大小并没有影响。也就是说,如果你手机SD卡上的图片通过流的形式读到内存中,在内

  • 本文向大家介绍java处理数据库不支持的emoji表情符问题解决,包括了java处理数据库不支持的emoji表情符问题解决的使用技巧和注意事项,需要的朋友参考一下 一般数据库的编码是utf8,utf8是不支持存储表情符的,当存入的微信昵称带有表情符时就会出现乱码情况,有两种解决方法: 1.mysql数据库升级到5.5版本以上,utf8改为utf8mb4,utf8mb4的字符最多可以是4个字节,可以

  • 本文向大家介绍轻松理解Python 中的 descriptor,包括了轻松理解Python 中的 descriptor的使用技巧和注意事项,需要的朋友参考一下 定义 通常,一个 descriptor 是具有“绑定行为”的对象属性。所绑定行为可通过 descriptor 协议被自定义的 __get__() , __set__() 和 __delete__() 方法重写。如果一个对象的上述三个方法任意