轻松处理PHP开发中微信emoji表情mysql存储的问题

Posted PHP的那些事

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了轻松处理PHP开发中微信emoji表情mysql存储的问题相关的知识,希望对你有一定的参考价值。

背景

做微信开发的时候发现,微信支持emoji表情做昵称,结果考虑不周

mysql表设计时,都是用UTF8字符集的。把带有emoji的昵称字段往里面insert一下就没了,整个字段变成了空字符串。有的根本插入是失败,原来是因为Mysqlutf8字符集是3字节的,而emoji4字节,这样整个昵称就无法存储了。

这要怎么办呢?

 

第一种方案:

如果你已经有很多数据了就不要修改字符集了因为会造成乱码情况你可以干掉他或者表情替换成***

 

$result[‘nickname‘] = preg_replace(‘/\\\u[a-z0-9]{4}/‘, ‘*‘, userTextEncode($result[‘nickname‘]));

function userTextEncode($str){

    if(!is_string($str))return $str;

    if(!$str || $str==‘undefined‘)return ‘‘;

 

    $text = json_encode($str); //暴露出unicode

    $text = preg_replace_callback("/(\\\u[ed][0-9a-f]{3})/i",function($str){

        return addslashes($str[0]);

    },$text); //emojiunicode留下,其他不动,这里的正则比原答案增加了d,因为我发现我很多emoji实际上是\ud开头的,反而暂时没发现有\ue开头。

    return json_decode($text);

}

第二种方案:

如果你还在测试阶段并没有真正产品数据就果断转化mysql字符集为:utf8mb4字符集,但是要求你的mysql版本>=5.5.3,你大可直接将utf8直接升级为utf8mb4字符集

这种4字节的utf8编码可完美兼容旧的3字节utf8字符集,并且可以直接存储emoji表情,是最好的解决方案,至于字节增大带来的性能损耗,可以忽略不计。

 

以上方案就可解决php微信昵称或一些富文本编辑器中的表情问题,希望大家喜欢。

 

以上是关于轻松处理PHP开发中微信emoji表情mysql存储的问题的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

php mysql支持emoji表情方案

想在微信公众平台开发者模式的自动回复里加入emoji表情,需要啥PHP方法来处理