PHP接入微信登陆时处理微信昵称表情
近些天,在开发的时候,需要接入微信授权登陆,并且需求是登陆后需要将微信的昵称,此时如果微信昵称中有emoji表情,可能会导致数据库存储失败...因为mysql的utf8字符集不能存储emoji表情,主要解决办法有一下几种方式:
- 存取微信昵称时候进行加解密操作
# 存 base64_encode($wechatNickname); # 取 base64_decode($wechatNickname);
此处可以使用thinkPHP的获取器
, 如果是laravel可以使用访问器
- 正则匹配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); }这里的正则,我也是自己百度...然后测试的...
3.数据库使用 utf8mb4 的字符集
命令行创建
CREATE DATABASE `test` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';注: 当数据库字符集为 utf8mb4 时, 数据库连接字符集也应该改为 utf8mb4, 防止不必要的bug
博主的文章或程序如果给您带来了价值,感谢您打赏一二

微信扫码支付

支付宝扫码支付