PHP 处理 微信用户昵称带有表情的问题
最近遇到一个问题,保存用户信息的时候,用户的昵称居然是空的,后面发现是因为用户的昵称中有表情,存进数据库时被过滤掉了,所以我们需要存数据库时做一下处理,取出来时也做处理。
第一种方法可以编码加密或解密
base64_encode(); //存储
base64_decode(); //取出
第二种方法是通过正则过滤
//表情写入数据库 | 参数:字符串$str,类型$type i是写入,o是输出
function input_phiz($str,$type="i")
{
if($type=="i"){
$str = preg_replace_callback('/[\xf0-\xf7].{3}/', function($r) {
return '@E' . base64_encode($r[0]);
}, $str);
}else if($type=="o"){
$str = preg_replace_callback('/@E(.{6}==)/', function($r) {
return base64_decode($r[1]);
}, $str);
}
return $str;
}
第三种方法
function removeEmoji($nickname) {
$clean_text = "";
//过滤字符集大于4的字符
$clean_text = preg_replace_callback('/./u', function (array $match) {
return strlen($match[0]) >= 4 ? '' : $match[0];
}, $nickname);
$clean_text = str_replace(array("\\","'",'"',':'), '', $clean_text);
return $clean_text;
}