使用JS过滤表情符号表情的主要原因:
输入标签中输入表情符号表情,表单提交后插入数据库。报错原因: 因为UTF-8编码有可能是两个,三个,四个字节.Emoji表情是4个字节,而MySQL的utf8编码最多3个字节,所以数据插不进去。
两个解决方案:
1.将Mysql的编码从utf8转换成utf8mb4
2.前端JS校验过滤掉emoji表情
判断文本中是否有表情符号表情
isEmojiCharacter(substring){ for ( var i = 0; i 1){ var ls = substring.charCodeAt(i + 1); var uc =((hs - 0xd800)* 0x400)+(ls - 0xdc00)+ 0x10000; if (0x1d000 <= uc && uc <= 0x1f77f){ return true ; } } } else if (substring.length> 1){ var ls = substring.charCodeAt(i + 1); if (ls == 0x20e3){ return true ; } } else { if (0x2100 <= hs && hs <= 0x27ff){ return true ; } else if (0x2B05 <= hs && hs <= 0x2b07){ return true ; } else if (0x2934 <= hs && hs <= 0x2935){ return true ; } else if (0x3297 <= hs && hs <= 0x3299){ return true ; } else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50){ return true ; } } } }
正则检验
HTML:JS:var str=$.trim($("#emojiStr").val());var patt = /[�-�][�-�]/g; // 检测utf16字符正则if(patt.test(str)){ alert("输入的字符非法!");}
![cc84d827d5d393c71292bb5ade24a822.png](https://img-blog.csdnimg.cn/img_convert/cc84d827d5d393c71292bb5ade24a822.png)