PHP过滤移除Emoji表情的几种方法

编辑于:2022年12月21日

PHP过滤移除Emoji表情的几种方法

虽然 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

相关推荐

暂无评论