前端输入Emoji表情导致的错误

本文介绍了因emoji表情导致存入MySQL数据库时出现的问题及解决方案。主要原因是MySQL utf8字符集不支持某些emoji编码,提供了两种正则过滤方法,并建议将数据库编码升级到utf8mb4。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用户输入了emoji表情,提交的时候因为后端没有存储相应的emoji字符编码,导致报错异常。

原因: unicode定义的emoji是四个字符,对于一些之前没有考虑过emoji表情的系统来说,其获取或者展示简直就是灾难。公司用的MySQL,其utf8字符集最多支持三个字符。

解决方案

  • 改变MySQL编码集设置,比如将其编码从utf8转换成utf8mb4
  • 前端直接过滤掉emoji,可以用正则实现

正则一:

regemoRule : /\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g, // 表情匹配正则

正则二:

function replaceEmoji (val) {
    var regStr = /[\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;
    var value = val;
    value = unescape(escape(value).replace(/\%uD.{3}/g, ''))
    return value;
};

以上两种正则方案都是线上采用的方式。

扩展阅读

字符编码相关知识(点击查看)

MySQL设置utf8mb4编码(点击查看)

emoji在各个APP中的编码问题
(点击查看)

记录解决emoji表情存入myql数据库报错
(点击查看)

emoji表情特殊字符出错处理
(点击查看)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值