怎么用JS来过滤Emoji ?

本文介绍了在使用MySQL的utf8编码时遇到Emoji表情无法插入的问题,并提供了两种解决方案:一是更改数据库编码为utf8mb4;二是通过JS代码过滤Emoji表情。最终选择了JS过滤方案,并分享了具体的实现代码。

今天遇到一个问题,输入输入法表情一直报错导致一直提交出错,后来查询了下原因是因为UTF-8编码有可能是两个、三个、四个字节。Emoji表情是4个字节,而MySql的utf8编码最多3个字节,所以数据插不进去。

解决方式(共2种)

1.将Mysql的编码从utf8转换成utf8mb4 2.JS过滤掉emoji表情

这里我们选择用js来过滤,代码如下

let oIpt = document.querySelector('#iptVal');

oIpt.value = oIpt.value.replace(/[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF][\u200D|\uFE0F]|[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF]|[0-9|*|#]\uFE0F\u20E3|[0-9|#]\u20E3|[\u203C-\u3299]\uFE0F\u200D|[\u203C-\u3299]\uFE0F|[\u2122-\u2B55]|\u303D|[\A9|\AE]\u3030|\uA9|\uAE|\u3030/ig, '');
复制代码

直接把去除表情后的值赋值给input就可以,以上正则可以匹配到iOS10.2.1及之前的全部emoji表情,Android的表情因为比较多,可能有遗漏,查询了一个解决方式如下:

let oIptVal = document.querySelector('#iptVal').value;

console.log(escape(oIptVal));

// escape得到%uD83C%u.........格式的编码,可对应成\u...格式就ok
复制代码

以上这样就基本解决了,如果有错误或者疏漏,还请大家多多指教

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值