第一步:在微信小程序的开发过程中,需要用户的授权登录并获取用户的信息,存储到数据库,但是如果用户的头像是Emoji表情的话,是存储不上去的,这是因为之前数据的utf8只能存储3个字节,而 emoji表情有些需要占4个字节。这时就需要我们修改数据库的编码格式了。
首先,我们新建数据库时选择utf8mb4编码,相应的表中字段也设置成utf8mb4编码
设置完之后,可以在数据库-->查询-->新建查询里运行一下下边的命令,查看数据库的编码格式是否改成utf8mb4编码
SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
之后将表和表字段全改成这个编码
第二步:在存储的时候 先进行转义 读取的时候反转义一下 就可以了
//将表情进行转义 用于存储的时候
public function emoji_encode($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;
}
//将表情进行反转义 用于读取的时候
public function emoji_decode($str){
$strDecode = preg_replace_callback('|\[\[EMOJI:(.*?)\]\]|', function($matches){
return rawurldecode($matches[1]);
}, $str);
return $strDecode;
}
亲测有效