最近半年做微信二次开发比较多,储存微信名字不可或缺可这罪恶的手机微信适用emoji小表情做呢称,这就有点儿睾丸疼了一般Mysql表设计方案时,全是用UTF8字符集的。把含有emoji的呢称字段名往里insert一下就没有了,全部字段名变成了空字符串。这是什么原因呢?原先是由于Mys
最近半年做微信二次开发比较多,储存微信名字不可或缺
可这罪恶的手机微信适用emoji小表情做呢称,这就有点儿睾丸疼了
一般Mysql表设计方案时,全是用UTF8字符集的。把含有emoji的呢称字段名往里insert一下就没有了,全部字段名变成了空字符串。这是什么原因呢?
原先是由于Mysql的utf8字符集是3字节数的,而emoji是4字节,那样全部呢称就没法储存了。这要怎么办呢?我详细介绍几类方式
1、应用utf8mb4字符集
假如你的mysql版本号>=5.5.3,你大能立即将utf8立即升級为utf8mb4字符集
这类4字节的utf8编号可极致适配旧的3字节数utf8字符集,而且能够立即储存emoji小表情,是最好是的解决方法
对于字节数扩大产生的特性耗损,我看了一些测评,基本上是能够忽略的
2、应用base64编号
假如你由于一些缘故没法应用utf8mb4得话,你要能够应用base64来攘外必先安内
应用比如base64_encode这类的涵数编号之后的emoji能够立即储存在utf8字节数集的数据分析表中,取下时decode一下就可以
3、弄死emoji小表情
emoji小表情是个不便的物品,即便你可以储存,也不一定能极致显示信息。在iOS之外的服务平台上,比如PC或是android。假如你必须显示信息emoji,就得提前准备一大堆emoji照片并应用第三方前端开发类库才行。即使如此,還是将会由于emoji照片不足全而出現不显示的状况
在大部分业务场景下,emoji也不是非要不可的。我们可以适度地考虑到弄死它,节省各种各样成本费
历经一番千辛万苦的google,总算寻找可靠可用的编码:
// 过滤掉emoji表情
function filterEmoji($str)
{
$str = preg_replace_callback(
'/./u',
function (array $match) {
return strlen($match[0]) >= 4 ? '' : $match[0];
},
$str);
return $str;
}
基础观念便是解析xml字符串数组中的每一个标识符,假如该标识符的长短为4个字节数,就将其删掉。