PHP處理emoji表情
阿新 • • 發佈:2019-01-11
字串包含emoji表情 , 在使用MySQL直接儲存的時候 , 有些特殊字元會儲存失敗 , 比如儲存使用者暱稱 , 有些使用者暱稱帶有emoji表情 , 然後在儲存的時候 , 會出錯 , 通常這種情況的處理辦法就是 , 直接將emoji表情過濾掉 ; 也有時候需要保留emoji表情 , 那麼就只能轉義儲存 , 取出來的時候 , 再轉回來 , 類似於編碼和解碼!
1.過濾emoji表情
/** * 過濾特殊字元 * $str **/ function filter($str){ if($str){ $name = $str; $name = preg_replace('/\xEE[\x80-\xBF][\x80-\xBF]|\xEF[\x81-\x83][\x80-\xBF]/', '', $name); $name = preg_replace('/xE0[x80-x9F][x80-xBF]‘.‘|xED[xA0-xBF][x80-xBF]/S','?', $name); $return = @json_decode(preg_replace("#(\\\ud[0-9a-f]{3})#ie","",json_encode($name))); }else{ $return = ''; } return $return; }
2.編碼解碼
function userTextEncode($str){ if(!is_string($str)) return $str; if(!$str || $str=='undefined') return ''; $text = json_encode($str); //暴露出unicode $text = preg_replace_callback("/(\\\u[2def][0-9a-f]{3})/i",function($str){ return addslashes($str[0]); },$text); //將emoji的unicode留下,其他不動,這裡的正則比原答案增加了d,因為我發現我很多emoji實際上是\ud開頭的,反而暫時沒發現有\ue開頭。 return json_decode($text); } function userTextDecode($str){ $text = json_encode($str); //暴露出unicode $text = preg_replace_callback('/\\\\\\\\/i',function($str){ return '\\'; },$text); //將兩條斜槓變成一條,其他不動 return json_decode($text); }