emoji字符是兴于日韩的字符表情包,能够直观的表达文字情感,备受网络用户喜爱。
在程序开发中不可避免得回遇到这种问题。导致数据显示不全或者丢失,处理方案有三种
① 使用正则表达式直接过滤掉特殊字符
如果说用户名存在emoji字符,会导致数据库(utf8存储)插入时丢失数据。利用的原理就是 emoji字符都是4字节结构,比中文形式(2-3字节)的占用空间大,通过正则表达式只取unicode字符 判断是否属于4字节类型
// 过滤掉emoji表情
function filter_Emoji($str)
{
$str = preg_replace_callback( //执行一个正则表达式搜索并且使用一个回调进行替换
'/./u',
function (array $match) {
return strlen($match[0]) >= 4 ? '' : $match[0];
},
$str);
return $str;
}
② 直接修改数据库结构为utf8mb4
字符集 支持emoji字符
字节增大会带来额外的性能损耗
③ 如果不想改变数据库结构,在条件允许下可以采用base64编码 达到曲线救国 取出来使用再解码一下