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

编辑于:2022年12月21日

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

相关推荐

WordPress 禁止密码重置找回功能

WordPress 禁止密码重置找回功能

对于只允许使用手机号验证码注册和登录的 WordPress 而言,密码重置或找回功能就没啥用处了,可以直接禁止此功能。 代码部署 在主题functions.php文件底部,添加如下代码,保存后生效。 function disable_password_r ...

如何查询所用 SSL 证书的 OCSP 服务网址

如何查询所用 SSL 证书的 OCSP 服务网址

在浏览器查询当前 SSL 证书的OCSP服务网址,Ping 得 ip 地址后检测其连接状态,如若 OCSP 校验服务器的延迟较高或被阻断,则可通过配置 OCSP Stapling 或更换其它证书的方式优化加速。 当前只有iOS系统下的Safari 浏 ...

暂无评论