1.将emoji表情转换成16进制字符串,取出来的时候转换成10进制字符串
function hexToStr($hex)//十六进制转字符串
{
$string="";
for($i=0;$i<strlen($hex)-1;$i+=2)
$string.=chr(hexdec($hex[$i].$hex[$i+1]));
return $string;
}
2.数据库字段编码设置成utf8mb4,排序规则设置为utf8mb4_general_ci
连接数据库之后 记得加上set names utf8mb4命令
3.直接过滤掉emoji表情
/**
* 过滤emoji表情
*@param type $str
* @return type
*/
function replace_emoji($str){
$tmpStr = json_encode($str); //暴露出unicode
$tmpStr = preg_replace("#(\ue[0-9a-f]{3})#ie","",$tmpStr); //将emoji的unicode留下,其他不动
$new_str = json_decode($tmpStr);
return $new_str;
}
4.加上标识符,取出来的时候转换一下
function emoji2str($str){
$strEncode = '';
$length = mb_strlen($str,'utf-8');
for ($i=0; $i < $length; $i++) {
$_tmpStr = mb_substr($str,$i,1,'utf-8');
if(strlen($_tmpStr) >= 4){
$strEncode .= '[[EMOJI:'.rawurlencode($_tmpStr).']]';
}else{
$strEncode .= $_tmpStr;
}
}
return $strEncode;
}
function str2emoji($str){
$strDecode = preg_replace_callback("/[[EMOJI:(.*?)]]/", function($matches){
return rawurldecode($matches[1]);
}, $str);
return $strDecode;
}