微信昵称包含emoji表情,保存异常
MySQL要存储emoji表情,由于emoji表情的unicode编码占用4个字节,而Mysql的utf8编码最多只能存储3个字节,
所以保存到数据库时会产生异常,一般两种解决方法,
方法一
修改数据库的字符集为utf8mb4,MySQL支持 emoji 表情的最低版本为5.5.3,否则不支持字符集utf8mb4。
# 修改数据库: ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; # 修改表: ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; # 修改表字段: ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
修改mysql的配置文件,一般在/etc/my.cnf,最重要的修改是 [mysqld] 的配置添加
[client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4'
最后检查一下,数据库环境
mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'; +--------------------------+--------------------+ | Variable_name | Value | +--------------------------+--------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | collation_connection | utf8mb4_unicode_ci | | collation_database | utf8mb4_unicode_ci | | collation_server | utf8mb4_unicode_ci | +--------------------------+--------------------+
mysql> SHOW FULL FIELDS FROM tbl_user;
注意程序连接数据库时,是否支持该字符集
方法二
如果有些情况修改数据库配置的方式不可执行,则只能从程序段动手,原则就是转码保存再转码显示
/**把用户输入的文本转义(主要针对特殊符号和emoji表情)*/public function userTextEncode($str){if(!is_string($str))return $str;if(!$str || $str=='undefined')return '';$text = json_encode($str); //暴露出unicode$text = preg_replace_callback("/(\\\u[ed][0-9a-f]{3})/i",function($str){return addslashes($str[0]);},$text);//将emoji的unicode留下,其他不动,这里的正则比原答案增加了d,因为我发现我很多emoji实际上是\ud开头的,反而暂时没发现有\ue开头。return json_decode($text);}/**解码上面的转义*/public function userTextDecode($str){$text = json_encode($str); //暴露出unicode$text = preg_replace_callback('/\\\\\\\\/i',function($str){return '\\';},$text); //将两条斜杠变成一条,其他不动return json_decode($text);}
即将emoji表情的unicode编码保存到数据库中,待取出时候再做转义回,使用上面的方法需要注意
1)中文字符串经过json_encode后生成的json字符串,是用''括起来的,例如'"\ud83c\udf89 \ud83d\udcb0"',尤其
是做测试用作参数时候,如果没有单引号直接json_decode是返回null的;
2)json_encode的字符串中包含转义字符“ \ ”时,编码后会生成两个“ \ ”,所以方法 userTextDecode 中正则表达是才用
八个“ \ ”来匹配;
转载于:https://www.cnblogs.com/oneyear/p/8469872.html
微信昵称包含emoji表情,保存异常相关推荐
- 微信昵称乱码 mysql_微信网页开发获取用户昵称乱码 微信昵称包含emoji表情乱码的解决方案...
微信网页开发获取用户昵称乱码 微信昵称包含emoji表情乱码的解决方案如下: 问题产生原因:由于数据库及属性一致设为utf8,而utf8只支持1-3个字节.当用户昵称为emoji表情时,获取用户基本信 ...
- 微信小程序web-view嵌入h5———微信名包含emoji表情,导致数据无法存入数据库
由于部分用户微信名包含emoji表情导致无法存入数据库. 报错为:[2019-08-27 16:21:12] [ERROR] [org.hibernate.engine.jdbc.spi.SqlExc ...
- java emoji表情 乱码_java 微信昵称带有emoji 表情乱码
问题描述: ipone5s中昵称输入"emoji表情",保存数据库有问题. 运行环境: Java.Tomcat.mysql.Linux(我的Linux下为乱码,这个是linux问题 ...
- 处理微信昵称的emoji表情
2019独角兽企业重金招聘Python工程师标准>>> 一.转移emoji存储到mysql数据库 function emoji_encode($nickname){$strEncod ...
- mysql无法存储微表情、微信昵称包含微表情无法存储数据库
网上搜到了很多关于这个问题的解决办法,但是都没解决我的问题.我的mysql用的是windows版mysql-server 5.7 首先我按照基本方法,修改my.inf配置文件,添加下面配置: [mys ...
- java ipone 微信昵称emoji表情保存失败 无法存入数据库
问题描述:ipone5s中昵称输入"emoji 表情",保存数据库有问题. 运行环境:Java.Tomcat.mysql.Linux(我的Linux下为乱码,这个是linux问题) ...
- mysql 过滤微信昵称表情_PHP正则过滤处理微信昵称中emoji字符的方法
本文实例讲述了PHP正则过滤处理微信昵称中emoji字符的方法.分享给大家供大家参考,具体如下: 今天刚做了一个微信应用,在获取微信昵称的过程中报错了,经查原因是微信昵称中包含emoji字符,在写入数 ...
- php过滤微信昵称的emoji表情符号,emoji表情过滤处理
微信消息接口开发时,消息体包含emoji表情时,不考虑存储emoji表情,可使用preg_replace函数过滤替换,PHP如下: ... $content=json_decode(preg_repl ...
- PHP处理微信中带Emoji表情的消息发送和接收(Unicode字符转码编码)
在进行微信公众号开发者接入的时候,与用户的对话互动中,涉及到的文本信息不仅仅是文字那么简单,其中可能还会包含着各种表情字符,例如「emoji表情」. 百科: Emoji 由于微信接口中对于emoji ...
最新文章
- oracle运行企业管理器,如何打开Oracle 10g的企业管理器(Enterprise Manager)?
- java让用户输入3个随机数_3-流程控制、随机数、键盘输入
- LeetCode 961. 重复 N 次的元素
- manjaro 安装tensorflow 【CPU版本】 环境
- 使用Navicat管理MySQL用户
- linux 中断服务程序,request_irq() linux注册中断服务
- Do 32-bit build only with XCode 5.1
- checking for tgetent()... configure: error: NOT FOUND!
- OpenDaylight Hydrogen版本应用SampleTap研究(一)
- 纪念DOS下的经典软件
- LSM6DS3 gyro数据设置
- 基于zynq的千兆网udp项目_米联客 ZYNQ/SOC 精品教程 S05-CH03-UDP千兆光通信
- 网易云音乐黑胶会员免费领取
- OpenCV彩色图像读取
- 复杂交通流对混合交通的影响研究多向车流量分析
- 获取视频网站上视频的缩略图以及其他信息
- ACC自适应巡航控制系统介绍
- arm sshd交叉编译及部署
- Proxmox VE 7.2 网卡直通
- PMT函数是怎么使用的?
热门文章
- 的列数 获取mysql_阿里面试:MySQL如何设计索引更高效?
- cent os7 安装kafka_2.13-2.6.0
- PowerDesigner16.5汉化破解版安装教程(含安装文件、汉化包、破解文件)
- SQL中Convert()函数的使用方法
- lepus监控oracle数据库_实用脚本一键监控oracle数据库索引使用状况
- python编程从入门到实战的16堂课_好评如潮,百万Python程序员的「案头必备书」,终于出配套习题解答了!...
- 虚拟文件系统模拟_容器和虚拟机到底有啥区别?
- 系统学习深度学习(三十九)--基于模型的强化学习与Dyna算法框架
- c语言计算总分和平均分float,用C语言编程平均分数
- PAT (Basic Level) Practice1018 锤子剪刀布