背景
行動裝置經常會發生使用者發送的內容中包含emoji表情,未經處理,在顯示時就是亂碼。
解決方案
1.資料庫支援:將Mysql的編碼從utf8轉換成utf8mb4。
2.匹配出內容中的emoji表情做過濾或替換
/** * 表情轉換 更新到ios9.2涵蓋編碼範圍 * @param $str * @return mixed */public static function emoji_to_html($str) { $regex = '/([0-9|#][\x{20E3}])|[\x{00ae}|\x{00a9}|\x{203C}|\x{2047}|\x{2048}|\x{2049}|\x{3030}|\x{303D}|\x{2139}|\x{2122}|\x{3297}|\x{3299}][\x{FE00}-\x{FEFF}]?|[\x{2190}-\x{21FF}][\x{FE00}-\x{FEFF}]?|[\x{2300}-\x{23FF}][\x{FE00}-\x{FEFF}]?|[\x{2460}-\x{24FF}][\x{FE00}-\x{FEFF}]?|[\x{25A0}-\x{25FF}][\x{FE00}-\x{FEFF}]?|[\x{2600}-\x{27BF}][\x{FE00}-\x{FEFF}]?|[\x{2900}-\x{297F}][\x{FE00}-\x{FEFF}]?|[\x{2B00}-\x{2BF0}][\x{FE00}-\x{FEFF}]?|[\x{1F000}-\x{1F6FF}][\x{FE00}-\x{FEFF}]?|[\x{1F900}-\x{1F9FF}][\x{FE00}-\x{FEFF}]?/u'; $str = preg_replace_callback($regex,function($matches){ $str = json_encode($matches[0]); $str = ''; return $str; },$str); return $str;}從資料庫取出後再轉回$string = preg_replace_callback('/<\/em>/is', "self::preg_emoji", $string);/** * 輸出emoji表情 * @param $matches * @return mixed */public static function preg_emoji($matches){ $str = $matches[0]; $str = str_replace('em:', '\u', $str); return $str;}
3.直接過濾掉
/** * 過濾表情 * @param $str * @return mixed */public static function filter_emoji($str) { $regex = '/(\\\u[ed][0-9a-f]{3})/i'; $str = json_encode($str); $str = preg_replace($regex, '', $str); return json_decode($str);}
以上就介紹了php emoji表情處理,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。