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);
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值