php开发中处理emoji表情的问题
做与微信相关的开发,我们对于存储微信昵称必不可少。但是在处理微信昵称的时候,我们就会遇到一些麻烦,一般MySQL表设计时,都是用UTF8字符集的。当我们把带有emoji的昵称字段往里面insert时就没了,整个字段变成了空字符串。这是因为MySQL的utf8字符集是3字节的,而emoji是4字节,这样整个昵称就无法存储了。因此,我们要想支持emoji表情,可以通过以下3种方法处理:
1,使用utf8mb4字符集
通过将MySQL(MySQL>=5.5.3)存储emoji表情字段的字符集设置为utf8mb4字符集的方式实现emoji表情的存储。之前的文章已经说明过这种方式的实现方法,这里就不再过多说明,请参考 MySQL支持emoji表情的存储。
2,使用base64编码
如果因为某些原因无法使用utf8mb4的话,我们还可以通过对存储的emoji数据进行base64编码。在存储数据库之前,我们通过base64_encode之类的函数编码可以直接存储在utf8字符集的数据表中,并且在取出时,使用base64_decode解码一下即可。
3,干掉emoji表情
支持emoji表情是个麻烦的东西,有时即使能存储,也不一定能完美显示。可能会出现因emoji图片不够全而出现无法显示的情况。并且有些客户端可能还需要使用第三方类库,需要大量的emoji图片等。因此,如果emoji不是非要不可,我们可以把带有emoji内容的数据过滤掉,达到不影响其他数据的存储。过滤代码如下:
//过滤掉emoji表情,
function filterEmoji($str)
{
$str = preg_replace_callback(
"/./u",
function(array $match) {
return strlen($match[0]) >= 4? "" : $match[0];
},
$str);
return $str;
}
- 上一篇:没有了
- 下一篇:没有了