虽然 mysql 版本 >=5.5.3 时可以选择 utf8mb4 编码来正常储存 Emoji,但有时因业务需求必须过滤移除 Emoji 表情。在 UTF-8 编码下,英文占用一个字节,中文三个字节,而 Emoji 则是四个字节,利用这些规律,可有以下几种移除方法。
方法1:正规则过滤,利用Emoji占用4个字节的规律
//过滤emoji表情的函数 function cccitu_emoji($str) { $str = preg_replace_callback('/./u', function (array $match) { return strlen($match[0]) >= 4 ? '' : $match[0]; }, $str); return $str; } //测试过滤效果 $emoji='📱玩机,大学。🤖CCCiTU'; echo cccitu_emoji($emoji);//玩机,大学。CCCiTU
方法2:字符集过滤,将内容编码转换两次UTF-8/GBK
//mb_convert_encoding函数emoji会变成?号 $cccitu_str = '📱玩机,大学。🤖CCCiTU'; $cccitu_str = mb_convert_encoding($cccitu_str, 'GBK', 'UTF-8'); $cccitu_str = mb_convert_encoding($cccitu_str, 'UTF-8', 'GBK'); echo $cccitu_str;//?玩机,大学。?CCCiTU //iconv函数可以得到比较好的效果 $cccitu_str = '📱玩机,大学。🤖CCCiTU'; $cccitu_str = iconv('UTF-8', 'GBK//IGNORE', $cccitu_str); $cccitu_str = iconv('GBK', 'UTF-8//IGNORE', $cccitu_str); echo $cccitu_str; //玩机,大学。CCCiTU
暂无评论
要发表评论,您必须先 登录