背景

做微信支付的时候发现,微信扶助emoji表情做小名,结果考虑不周

Mysql表设计时,都是用UTF8字符集的。把带有emoji的别名字段往里面insert一下就没了,整个字段变成了空字符串。有的根本插入是败退,原来是因为Mysql的utf8字符集是3字节的,而emoji是4字节,那样全方位别称就不恐怕储存了。

那要咋办吧?

 

首先种方案:

若果您早就有好多数目了就不要改动字符集了因为会招致乱码景况你能够杀死他依旧神色替换来***

 

$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); //将emoji的unicode留下,其余不动,那里的正则比原答案扩张了d,因为自身发觉本身很多emoji实际上是\ud初阶的,反而如今没察觉有\ue开头。

    return json_decode($text);

}

第二种方案:

一经您还在测试阶段并没有当真产品数量就坚决转化mysql字符集为:utf8mb4字符集,然则必要你的mysql版本>=5.5.3,你大可直接将utf8一贯接升学级为utf8mb4字符集

那种4字节的utf8编码可周密包容旧的3字节utf8字符集,并且可以直接存款和储蓄emoji表情,是最好的消除方案,至于字节增大带来的习性损耗,能够忽略不计。

 

如上方案就可消除PHP微信外号或部分富文本编辑器中的表情难题,希望我们欢畅。

 

相关文章

网站地图xml地图