自在处理PHP开发中微信emoji表情mysql存款和储蓄的标题

背景

做微信支付的时候发现,微信协理emoji表情做外号,结果考虑不周

Mysql表设计时,都以用UTF8字符集的。把带有emoji的别名字段往里面insert一下就没了,整个字段变成了空字符串。有的根本插入是没戏,原来是因为Mysql的utf八字符集是3字节的,而emoji是肆字节,那样全方位外号就不能够储存了。

那要如何是好吧?

 

首先种方案:

假定您早就有不少数量了就毫无改动字符集了因为会招致乱码情况你能够杀死他依旧神色替换到***

 

$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(“/(\\\PHP,u[ed][0-9a-f]{3})/i”,function($str){

        return addslashes($str[0]);

    },$text); //将emoji的unicode留下,别的不动,那里的正则比原答案增添了d,因为自己发现自家很多emoji实际上是\ud开首的,反而近日没察觉有\ue开头。

    return json_decode($text);

}

第两种方案:

假定你还在测试阶段并不曾真正产品数据就坚决转化mysql字符集为:utf八mb4字符集,可是供给你的mysql版本>=5.伍.3,你大可径直将utf八一向接升学级为utf8mb四字符集

这种4字节的utf八编码可周全同盟旧的叁字节utf八字符集,并且能够一直存储emoji表情,是最棒的消除方案,至于字节增大带来的属性损耗,能够忽略不计。

 

上述方案就可解决PHP微信小名或部分富文本编辑器中的表情难题,希望大家欣赏。

 

相关文章