PHP處理emoji表情

字符串包含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);
}

轉載自 https://blog.csdn.net/sinat_35861727/article/details/82589632

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章