背景

举行微信支付的下发现,微信支持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编码json可全面配合旧的3配节utf8字符集,并且可一直存储emoji表情,是极端好的解决方案,至于字节增大带来的习性损耗,可以忽略不计。

 

上述方案就只是迎刃而解PHP微信昵称或有有余文本编辑器中的神色问题,希望大家爱不释手。

 

相关文章

网站地图xml地图