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下载远程图片函数 可伪造来路
Jun 25 PHP
discuz目录文件资料汇总
Dec 30 PHP
php输入数据统一类实例
Feb 23 PHP
PHP弹出对话框技巧详细解读
Sep 26 PHP
PHP使用SOAP扩展实现WebService的方法
Apr 01 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
Apr 15 PHP
深入理解PHP JSON数组与对象
Jul 19 PHP
Yii2中多表关联查询hasOne hasMany的方法
Feb 15 PHP
php图片合成方法(多张图片合成一张)
Nov 25 PHP
浅谈PHP各环境下的伪静态配置
Mar 13 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
Dec 20 PHP
PHP获取当前时间不准确问题解决方案
Aug 14 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框架builder、update、delete使用方法
2014/04/30 PHP
ThinkPHP3.1新特性之G方法的使用
2014/06/19 PHP
php获取四位字母和数字的随机数的实现方法
2015/01/09 PHP
一个简单的php路由类
2016/05/29 PHP
通过 Dom 方法提高 innerHTML 性能
2008/03/26 Javascript
基于jquery的一个简单的脚本验证插件
2010/04/05 Javascript
JQuery Study Notes 学习笔记(一)
2010/08/04 Javascript
基于jquery的使ListNav兼容中文首字拼音排序的实现代码
2011/07/10 Javascript
JS动态加载当前时间的方法
2015/02/09 Javascript
js简单的点击返回顶部效果实现方法
2015/04/10 Javascript
jQuery获取页面元素绝对与相对位置的方法
2015/06/10 Javascript
Javascript控制div属性动态变化实例分析
2015/10/08 Javascript
javascript简单实现等比例缩小图片的方法
2016/07/27 Javascript
详细分析Javascript中创建对象的四种方式
2016/08/17 Javascript
Angular 4环境准备与Angular cli创建项目详解
2017/05/27 Javascript
解决vue router使用 history 模式刷新后404问题
2017/07/19 Javascript
vue编译打包本地查看index文件的方法
2018/02/23 Javascript
vue图片加载失败时用默认图片替换的方法
2019/08/29 Javascript
关于vue3默认把所有onSomething当作v-on事件绑定的思考
2020/05/15 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
2020/08/03 Javascript
微信小程序input抖动问题的修复方法
2021/03/03 Javascript
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
Python饼状图的绘制实例
2019/01/15 Python
Python 多个图同时在不同窗口显示的实现方法
2019/07/07 Python
纯python进行矩阵的相乘运算的方法示例
2019/07/17 Python
django框架用户权限中的session缓存到redis中的方法
2019/08/06 Python
wxPython绘图模块wxPyPlot实现数据可视化
2019/11/19 Python
python面向对象之类属性和类方法案例分析
2019/12/30 Python
Python实现扫码工具的示例代码
2020/10/09 Python
英国屋顶用品和材料超市:Roofing Supplies UK
2019/08/24 全球购物
演讲稿怎么写才完美
2014/01/02 职场文书
企业党员公开承诺书
2014/03/26 职场文书
志愿者活动总结范文
2014/04/26 职场文书
离婚协议书该怎么写
2014/10/04 职场文书
python基础之爬虫入门
2021/05/10 Python
MySQL 自定义变量的概念及特点
2021/05/13 MySQL