一、问题现象
保存微信用户昵称到数据库,ios用户的昵称包含表情,插入数据库出错。
二、分析
使用JS过滤emoji表情的主要原因:input标签中输入emoji表情,提交表单后插入数据库报错。
原因是因为UTF-8编码有可能是两个、三个、四个字节。Emoji表情是4个字节,而MySQL的utf8编码最多3个字节,所以数据插不进去。
三、解决方案
1.将Mysql的编码从utf8转换成utf8mb4
2.前端JS校验过滤掉emoji表情
下面主要粘下过滤emoji的JS代码
functionfilteremoji(){
varranges=[
'\ud83c[\udf00-\udfff]',
'\ud83d[\udc00-\ude4f]',
'\ud83d[\ude80-\udeff]'
];
varemojireg=$("#emoji_input").val();
emojireg=emojireg.replace(newRegExp(ranges.join('|'),'g'),''));
}