PHP接入微信登陆时处理微信昵称表情

近些天,在开发的时候,需要接入微信授权登陆,并且需求是登陆后需要将微信的昵称,此时如果微信昵称中有emoji表情,可能会导致数据库存储失败...因为mysql的utf8字符集不能存储emoji表情...主要解决办法有一下几种方式

  1. 存取微信昵称时候进行加解密操作
# 存
base64_encode($wechatNickname);
# 取
base64_decode($wechatNickname);

此处可以使用thinkPHP的 获取器, 如果是laravel可以使用 访问器

  1. 正则匹配emoji并且替换
// 方法1
static public function removeEmoji($nickname)
{
    $nickname = preg_replace('/[\x{1F600}-\x{1F64F}]/u', '', $nickname);
    $nickname = preg_replace('/[\x{10000}-\x{10FFFF}]/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));
}

// 方法2:
static public function filterEmoji($nickname)
{
    return preg_replace_callback('/./u', function (array $match) {
        return strlen($match[0]) >= 4 ? '' : $match[0];
    }, $nickname);
}

这里的正则,我也是自己百度...然后测试的...

  1. 数据库使用 utf8mb4 的字符集
  • 图形化工具创建


    7942449-56d94fe96e63907f.png
    create database
  • 命令行创建

CREATE DATABASE `test` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';

注: 当数据库字符集为 utf8mb4 时, 数据库连接字符集也应该改为 utf8mb4, 防止不必要的bug

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值