3种方法轻松处理php开发中emoji表情的问题


Posted in PHP onJuly 18, 2016

背景

做微信开发的时候就会发现,存储微信昵称必不可少。

可这万恶的微信支持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;
 }

以上就是为大家总结的PHP微信开发中涉及到emoji表情的几种处理方法,基本思想就是遍历字符串中的每个字符,如果该字符的长度为4个字节,就将其删除。希望大家喜欢!

PHP 相关文章推荐
PHP 防注入函数(格式化数据)
Aug 08 PHP
php中数组首字符过滤功能代码
Jul 31 PHP
php解析url的三个示例
Jan 20 PHP
解析PHP强制转换类型及远程管理插件的安全隐患
Jun 30 PHP
PHP设计模式之装饰者模式代码实例
May 11 PHP
PHP使用递归方式列出当前目录下所有文件的方法
Jun 02 PHP
PHP实现获取中英文首字母
Jun 19 PHP
yii2.0实现验证用户名与邮箱功能
Dec 22 PHP
Zend Framework教程之前端控制器Zend_Controller_Front用法详解
Mar 07 PHP
php微信公众号开发之现金红包
Apr 16 PHP
详解Laravel5.6 Passport实现Api接口认证
Jul 27 PHP
php面试中关于面向对象的相关问题
Feb 13 PHP
PHP生成图像验证码的方法小结(2种方法)
Jul 18 #PHP
Yii2中DropDownList简单用法示例
Jul 18 #PHP
Yii2使用dropdownlist实现地区三级联动功能的方法
Jul 18 #PHP
Yii2框架dropDownList下拉菜单用法实例分析
Jul 18 #PHP
用HTML/JS/PHP方式实现页面延时跳转的简单实例
Jul 18 #PHP
浅谈PHP正则中的捕获组与非捕获组
Jul 18 #PHP
Yii2.0表关联查询实例分析
Jul 18 #PHP
You might like
CodeIgniter中使用cookie的三种方式详解
2014/07/18 PHP
php计算给定时间之前的函数用法实例
2015/04/03 PHP
php session的应用详细介绍
2017/03/22 PHP
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
jQuery插件StickUp实现网页导航置顶
2015/04/12 Javascript
swtich/if...else的替代语句
2015/08/16 Javascript
js实现添加可信站点、修改activex安全设置,禁用弹出窗口阻止程序
2016/08/17 Javascript
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
bootstrap下拉列表与输入框组结合的样式调整
2016/10/08 Javascript
JS创建Tag标签的方法详解
2017/06/09 Javascript
详解用vue编写弹出框组件
2017/07/04 Javascript
原生JS 购物车及购物页面的cookie使用方法
2017/08/21 Javascript
使用ng-packagr打包Angular的方法示例
2018/09/21 Javascript
vue实现压缩图片预览并上传功能(promise封装)
2019/01/10 Javascript
js实现图片跟随鼠标移动效果
2019/10/16 Javascript
Vue项目中数据的深度监听或对象属性的监听实例
2020/07/17 Javascript
解决Mint-ui 框架Popup和Datetime Picker组件滚动穿透的问题
2020/11/04 Javascript
[01:28]国服启动器接入蒸汽平台操作流程视频
2021/03/11 DOTA
基于python的汉字转GBK码实现代码
2012/02/19 Python
python实现进程间通信简单实例
2014/07/23 Python
Python3之文件读写操作的实例讲解
2018/01/23 Python
Python从零开始创建区块链
2018/03/06 Python
python pandas中对Series数据进行轴向连接的实例
2018/06/08 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
2018/11/06 Python
Python之时间和日期使用小结
2019/02/14 Python
Python模拟百度自动输入搜索功能的实例
2019/02/14 Python
Python中常用的8种字符串操作方法
2019/05/06 Python
python中property属性的介绍及其应用详解
2019/08/29 Python
Python如何重新加载模块
2020/07/29 Python
CSS3教程:background-clip和background-origin
2008/10/17 HTML / CSS
Bodum官网:咖啡和茶壶、玻璃器皿、厨房电器等
2018/08/01 全球购物
七夕相亲活动策划方案
2014/08/31 职场文书
成品仓库管理员岗位职责
2015/04/09 职场文书
全陪导游词开场白
2015/05/29 职场文书
风雨哈佛路观后感
2015/06/03 职场文书
SQL Server——索引+基于单表的数据插入与简单查询【1】
2021/04/05 SQL Server