-
需求背景:
用户昵称中会存在
emoji
表情,导致各个平台推送数据时会有异常发生,所以有了emoji
表情过滤的需求.最初是写了正则过滤,但是会有漏网之鱼,后来研究发现,
emoji
表情都是4个字节,所以根据这一特性,有了新的过滤方法 -
实现原理:
将字符串分割为单独的独立个体,然后检测每一个独立个体的字节数,符合要求的压入数组,整个字符串全部处理完成后,再将数组内的单独个体重新拼装就能实现过滤的需求
-
补充说明:
-
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;
}
}