最近半年做微信二次开发比较多,储存微信名字不可或缺可这罪恶的手机微信适用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个字节数,就将其删掉。

未经允许不得转载! 作者:访客,转载或复制请以超链接形式并注明出处x36交易网

原文地址:https://www.x36.cn/post/2281.html发布于:2020-07-11