1. 程式人生 > >輕松處理PHP開發中微信emoji表情mysql存儲的問題

輕松處理PHP開發中微信emoji表情mysql存儲的問題

版本 style tro post nbsp utf8mb4 turn 字段 插入

背景

做微信開發的時候發現,微信支持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存儲的問題