去掉字符串中的emoji表情字符
2017-11-20 阅读数:234

        罗列这几天网络上查到的几种去掉字符串中emoji表情字符的方法:

1.php正则去除

function removeEmoji($str) {
    if (empty($str)){
        return '';
    }
    $str = preg_replace_callback('/./u',function($match){
        return strlen($match[0]) >= 4 ? '': $match[0];
    },$str);
    return $str;
}

        这里利用正则修正符u,将字符串当成UTF-8匹配,长度大于等于4的字符为emoji表情字符(中文字符长度等于3)

2.js正则去除

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 org_val = $("input").val();
if(regStr.test(org_val)){
  $("#input").val(org_val.replace(regStr,""));
}

        上面的正则可以匹配iOS10.2.1及之前的全部emoji表情,Android的表情因为比较多,如上面的正则有遗漏,可自行补充。测试一个表情的编码方法如下:

<input type="text" />
var org_val = $("input").val();
console.log(escape(org_val));
//escape得到%uD83C%u.........格式的编码,可对应成\u...格式

3.修改数据库编码为utf8mb4

4.修改数据表中存储带有emoji表情的字段编码为utf8mb4,mysql5.6测试通过

        因为MySQL 存储 utf8mb4 时候使用 4 个字节,比直接使用utf8占用的空间更多 charset-unicode-utf8mb4,所以请重新考虑下字段的长度 , 否则可能会出现 (1406, "Data too long for column 'nickname' at row 1") 之类的错误。

前方10米有沙发可抢!
大人,请先右上角登个录 ↑
Copyright@2017-2020 www.dongguagua.com All Right Reserived 京ICP备17025269号