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

背景mysql

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

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

这要怎么办呢?微信

 

第一种方案:微信开发

若是你已经有不少数据了就不要修改字符集了由于会形成乱码状况你能够干掉他或者表情替换成***编辑器

 

$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 '';spa

 

    $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微信昵称或一些富文本编辑器中的表情问题,但愿你们喜欢。

相关文章
相关标签/搜索