罗列这几天网络上查到的几种去掉字符串中emoji表情字符的方法:
1.php正则去除
1 2 3 4 5 6 7 8 9 | 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正则去除
1 2 3 4 5 | 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的表情因为比较多,如上面的正则有遗漏,可自行补充。测试一个表情的编码方法如下:
1 2 3 4 | < 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") 之类的错误。
上一篇:
php正则匹配到字符串里面的a标签
下一篇:
php二维数组按某个键值排序
友情提示:垃圾评论一律封号...