[转]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;
 }

原理:基本思想就是遍历字符串中的每个字符,如果该字符的长度为4个字节,就将其删除。

参考

1.PHP开发中涉及到emoji表情的几种处理方法

2.PHP删除字符串中的emoji表情

扩展

nodejs,javascript过滤emoj表情

原文地址:https://www.cnblogs.com/fanbi/p/9524276.html

时间: 2024-10-28 19:38:01

[转]PHP开发中涉及到emoji表情的三种处理方法的相关文章

PHP开发中涉及到emoji表情的几种处理方法

最近几个月做微信开发比较多,存储微信昵称必不可少 可这万恶的微信支持emoji表情做昵称,这就有点蛋疼了 一般Mysql表设计时,都是用UTF8字符集的.把带有emoji的昵称字段往里面insert一下就没了,整个字段变成了空字符串.这是怎么回事呢? 原来是因为Mysql的utf8字符集是3字节的,而emoji是4字节,这样整个昵称就无法存储了.这要怎么办呢?我来介绍几种方法 1.使用utf8mb4字符集 如果你的mysql版本>=5.5.3,你大可直接将utf8直接升级为utf8mb4字符集

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

在Android开发中,定时器一般有以下3种实现方法

在Android开发中,定时器一般有以下3种实现方法: 原文地址http://www.360doc.com/content/12/0619/13/87000_219180978.shtml 一.采用Handler与线程的sleep(long)方法二.采用Handler的postDelayed(Runnable, long)方法三.采用Handler与timer及TimerTask结合的方法 下面逐一介绍: 一.采用Handle与线程的sleep(long)方法 Handler主要用来处理接受到的

Web开发中获取Spring的ApplicationContext的三种方式

在 WEB 开发中,可能会很少需要显示的获得 ApplicationContext 来得到由 Spring 进行管理的某些 Bean, 今天我就遇到了,在这里和大家分享一下, WEB 开发中,怎么获取 ApplicationContext 一       要想怎么获取 ApplicationContext, 首先必须明白 Spring 内部 ApplicationContext 是怎样存储的.下面我们来跟踪一下源码 首先:从大家最熟悉的地方开始 Java代码   <listener> <

关于八数码问题中的状态判重的三种解决方法(编码、hash、&lt;set&gt;)

八数码问题搜索有很多高效方法:如A*算法.双向广搜等 但在搜索过程中都会遇到同一个问题,那就是判重操作(如果重复就剪枝),如何高效的判重是8数码问题中效率的关键 下面关于几种判重方法进行比较:编码.hash.set 看到问题初学者最先想到的应该就是用一个vis数组标志一下即可.但是该申请多大的数组呢?一个9维数组(9^9=387420489太大了吧)?如果内存允许这是最高效的办法:O(1) 所以我们现在面临的问题是如何在O(1)的时间复杂度不变的情况下把空间压缩下来: 方法一:编码.解码,我们可

mysqli:查询数据库中,是否存在数据的三种校验方法

在我们编辑用户登录功能的时候,常常需要对用户输入的信息进行校验,校验的方法就是通过SQL语句进行一个比对,那么我们就需要用到以下三种中的一种进行校验啦 1.使用mysqli_num_rows()校验 例子: 成功情况: 失败情况: 2.使用mysqli_fetch_array()校验 例子: 成功情况: 失败情况: 3.使用mysqli_fetch_all()校验 例子: 成功情况: 失败情况: 以上 END 原文地址:https://www.cnblogs.com/finalanddistan

关于项目开发中涉及到输入表情的解决方案

通常情况下在后台服务器没有进行专门处理的情况下会返回异常,这时在前端就需要进行相应的处理. 1.限制输入表情    通过一个专门的函数判断输入的文字中是否包含表情 在NSString+Extension的扩展类中加入该类方法 + (BOOL)isContainsTwoEmoji:(NSString *)string { __block BOOL isEomji = NO; [string enumerateSubstringsInRange:NSMakeRange(0, [string leng

android开发中监听器的三种实现方法(OnClickListener)

Android开发中监听器的实现有三种方法,对于初学者来说,能够很好地理解这三种方法,将能更好地增进自己对android中监听器的理解. 一.什么是监听器. 监听器是一个存在于View类下的接口,一般以On******Llistener命名,实现该接口需要复写相应的on****(View v)方法(如onClick(View v)). 二.监听器的三种实现方法 (以OnClickListener为例) 方法一:在Activity中定义一个内部类继承监听器接口(这里是OnClickListener

iOS开发——淫技篇&amp;iOS开发中各种淫技总结(三)

iOS开发中各种淫技总结(三) 一:send和awk解释 sed -n p filenamesed ----------------------------是一个流编辑器(stream editor) awk ‘BEGIN {print “Hellow"}'awk --------是一种用于处理文本的编程语言工具. 二:传值方式总结 KVO底层会动态长生新的类,只能坚挺属性(一个对象的属性能背多个兑现监听,一个对象能监听多个对象的其他属性) kvc/kvo底层是基于runtime 代理,规范,代