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

用户输入了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表情特殊字符出错处理
(点击查看)

猜你喜欢

转载自blog.csdn.net/lihchweb/article/details/88964886