PHP处理微信小程序昵称带有表情

第一步:在微信小程序的开发过程中,需要用户的授权登录并获取用户的信息,存储到数据库,但是如果用户的头像是Emoji表情的话,是存储不上去的,这是因为之前数据的utf8只能存储3个字节,而 emoji表情有些需要占4个字节。这时就需要我们修改数据库的编码格式了。

  首先,我们新建数据库时选择utf8mb4编码,相应的表中字段也设置成utf8mb4编码

PHP处理微信小程序昵称带有表情_第1张图片PHP处理微信小程序昵称带有表情_第2张图片

设置完之后,可以在数据库-->查询-->新建查询里运行一下下边的命令,查看数据库的编码格式是否改成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;
}

亲测有效

你可能感兴趣的:(php,小程序)