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 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
Mar 28 PHP
php中判断字符串是否全是中文或含有中文的实现代码
Sep 16 PHP
Ping服务的php实现方法,让网站快速被收录
Feb 04 PHP
解析php入库和出库
Jun 25 PHP
PHP多进程编程实例
Oct 15 PHP
php图片的二进制转换实现方法
Dec 15 PHP
PHP MYSQL实现登陆和模糊查询两大功能
Feb 05 PHP
PHP文件下载实例代码浅析
Aug 17 PHP
PHP面向对象程序设计方法实例详解
Dec 24 PHP
Laravel学习教程之IOC容器的介绍与用例
Aug 15 PHP
php实现在线考试系统【附源码】
Sep 18 PHP
简单实用的PHP文本缓存类实例
Mar 22 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
Yii 2.0中场景的使用教程
2017/06/02 PHP
asp javascript 实现关闭窗口时保存数据的办法
2007/11/24 Javascript
理解Javascript_14_函数形式参数与arguments
2010/10/20 Javascript
jQuery打印指定区域Html页面并自动分页
2014/07/04 Javascript
jQuery中slice()方法用法实例
2015/01/07 Javascript
AspNet中使用JQuery boxy插件的确认框
2015/05/20 Javascript
jQuery Ajax Post 回调函数不执行问题的解决方法
2016/08/15 Javascript
js调用父框架函数与弹窗调用父页面函数的简单方法
2016/11/01 Javascript
jQuery仿IOS弹出框插件
2017/02/18 Javascript
js仿淘宝评价评分功能
2017/02/28 Javascript
html5+canvas实现支持触屏的签名插件教程
2017/05/08 Javascript
JavaScript队列函数和异步执行详解
2017/06/19 Javascript
js实现鼠标拖拽多选功能示例
2017/08/01 Javascript
js分页之前端代码实现和请求处理
2017/08/04 Javascript
基于vue组件实现猜数字游戏
2020/05/28 Javascript
微信小程序上传图片到服务器实例代码
2017/11/07 Javascript
Angular移动端页面input无法输入的解决方法
2017/11/14 Javascript
vue2 mint-ui loadmore实现下拉刷新,上拉更多功能
2018/03/21 Javascript
vue 动态表单开发方法案例详解
2019/12/02 Javascript
nuxt.js写项目时增加错误提示页面操作
2020/11/05 Javascript
Python中处理unchecked未捕获异常实例
2015/01/17 Python
在主机商的共享服务器上部署Django站点的方法
2015/07/22 Python
在Django的模板中使用认证数据的方法
2015/07/23 Python
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
Jupyter中直接显示Matplotlib的图形方法
2018/05/24 Python
python中plot实现即时数据动态显示方法
2018/06/22 Python
Python Web编程之WSGI协议简介
2018/07/18 Python
使用Python自动生成HTML的方法示例
2019/08/06 Python
django inspectdb 操作已有数据库数据的使用步骤
2021/02/07 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
HealthElement海外旗舰店:新西兰大卖场
2018/02/23 全球购物
技术总监管理岗位职责
2014/03/09 职场文书
日语专业求职信
2014/07/04 职场文书
2014年大学班长工作总结
2014/11/14 职场文书
python unittest单元测试的步骤分析
2021/08/02 Python
Redis基本数据类型String常用操作命令
2022/06/01 Redis