php过滤微信用户昵称emoji表情方法汇总
微信用户昵称带emoji表情的话,保存数据库会报错,解决办法有两种:一、修改数据库表和字段的字符集为utf8mb4;二、过滤emoji表情字符;根据自己的需求来选择。
这里主要介绍第二种方法,PHP过滤昵称表情这里主要有如下四种:
public function test() {
//$str = "爱心\uD83E\uDD14";
$str = "爱心爱心?";
// echo $this->emoji_encode($str);
// echo $this->filterNickname($str);
// echo $this->filterEmoji($str);
echo $this->emoji_encode(json_encode(json_decode($str)))."|";
echo $this->filterNickname(json_encode($str))."|";
echo $this->filterEmoji(json_encode($str))."|";
}
function filterEmoji($str)
{
$str = preg_replace_callback( '/./u',
function (array $match) {
return strlen($match[0]) >= 4 ? '' : $match[0];
},
$str);
return $str;
}
private function emoji_encode($nickname){
$strEncode = '';
$length = mb_strlen($nickname,'utf-8');
for ($i=0; $i < $length; $i++) { $_tmpStr = mb_substr($nickname,$i,1,'utf-8'); if(strlen($_tmpStr) >= 4){
$strEncode .= '[[EMOJI:'.rawurlencode($_tmpStr).']]';
}else{
$strEncode .= $_tmpStr;
}
}
return $strEncode;
}
function filterNickname($nickname) {
$nickname = preg_replace('/[\x{1F600}-\x{1F64F}]/u', '', $nickname);
$nickname = preg_replace('/[\x{1F300}-\x{1F5FF}]/u', '', $nickname);
$nickname = preg_replace('/[\x{1F680}-\x{1F6FF}]/u', '', $nickname);
$nickname = preg_replace('/[\x{2600}-\x{26FF}]/u', '', $nickname);
$nickname = preg_replace('/[\x{2700}-\x{27BF}]/u', '', $nickname);
$nickname = str_replace(array('"','\''), '', $nickname);
return addslashes(trim($nickname));
}
旗云号 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:php过滤微信用户昵称emoji表情方法汇总