PHP 过滤字符串中的emoji表情

  • 需求背景:

    用户昵称中会存在emoji表情,导致各个平台推送数据时会有异常发生,所以有了emoji表情过滤的需求.

    最初是写了正则过滤,但是会有漏网之鱼,后来研究发现,emoji表情都是4个字节,所以根据这一特性,有了新的过滤方法

  • 实现原理:

    将字符串分割为单独的独立个体,然后检测每一个独立个体的字节数,符合要求的压入数组,整个字符串全部处理完成后,再将数组内的单独个体重新拼装就能实现过滤的需求

  • 补充说明:

    1. str_random这个函数为laravel框架自带的辅助函数
  • 补充说明:

class emojiFilter
{    
    const NAME_RANDOM = 8;
    
    /**
     * Desc: 对字符串中的emoji进行过滤操作
     * Author: old_wang
     * Date: 2021/7/27 11:23
     * @param string $str  要过滤的字符串
     * @param int $random 指定随机字符串的长度
     * @return string
     */
    public static function filter(string $str,int $random=self::NAME_RANDOM) : string
    {
        $strArr = [];
        for ($i = 0; $i < mb_strlen($str); $i++) {
            $subStr = trim(mb_substr($str,$i,1));
            if(strlen($subStr) <= 3 && !empty($subStr)){
                array_push($strArr,mb_substr($str,$i,1));
            }
        }
    
        $implodeStr = implode('',$strArr);
        
        return empty($implodeStr) ? str_random($random) : $implodeStr;
    }
}

你可能感兴趣的:(PHP 过滤字符串中的emoji表情)