导引:单个emoji字符的长度为4个字节,而我们使用的MySQL数据的编码最长只支持3字节字符,所以插入emoji表情时会报错,最终的解决方案是将MySQL的编码修改为utf8mb4。

最近用户注册时喜欢在昵称中添加emoji表情,经常导致数据库插入查询失败。临时的解决方案是删除字符串中的emoji表情,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
// 过滤掉emoji表情
function filterEmoji($str)
{

$str = preg_replace_callback(
'/./u',
function (array $match) {
return strlen($match[0]) >= 4 ? '' : $match[0];
},
$str);

return $str;
}

基本思想就是遍历字符串中的每个字符,如果该字符的长度为4个字节,就将其删除。

(完)