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+MySQL5.0中文乱码解决方法
Nov 20 PHP
PHP下10件你也许并不了解的事情
Sep 11 PHP
用Zend Encode编写开发PHP程序
Feb 21 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
Jun 10 PHP
dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法
Apr 26 PHP
php实现的数字验证码及数字运算验证码
Jul 30 PHP
PHP中类的继承和用法实例分析
May 24 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
Jun 11 PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
Jan 10 PHP
详解PHP 二维数组排序保持键名不变
Mar 06 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
Aug 03 PHP
详解Laravel框架的依赖注入功能
May 27 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
WordPress中对访客评论功能的一些优化方法
2015/11/24 PHP
php实现搜索类封装示例
2016/03/31 PHP
浅谈PHP中的
2016/04/23 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
2019/10/14 PHP
javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历
2009/07/06 Javascript
JSON 客户端和服务器端的格式转换
2009/08/27 Javascript
web页面数据展示新想法(json)
2010/06/08 Javascript
基于jquery的关于动态创建DOM元素的问题
2010/12/24 Javascript
代码触发js事件(click、change)示例应用
2013/12/13 Javascript
connect中间件session、cookie的使用方法分享
2014/06/17 Javascript
JavaScript中的console.assert()函数介绍
2014/12/29 Javascript
nw.js实现类似微信的聊天软件
2015/03/16 Javascript
正则表达式优化JSON字符串的技巧
2015/12/24 Javascript
JavaScript类型系统之正则表达式
2016/01/05 Javascript
jQuery toggle 代替方法
2016/03/22 Javascript
JS中使用apply、bind实现为函数或者类传入动态个数的参数
2016/04/26 Javascript
JavaScript提高加载和执行效率的方法
2017/02/03 Javascript
浅谈js中function的参数默认值
2017/02/20 Javascript
js数组方法reduce经典用法代码分享
2018/01/07 Javascript
vue-router 前端路由之路由传值的方式详解
2019/04/30 Javascript
Node.js Windows Binary二进制文件安装方法
2019/05/16 Javascript
如何使用RoughViz可视化Vue.js中的草绘图表
2021/01/30 Vue.js
python中Flask框架简单入门实例
2015/03/21 Python
python使用PyGame播放Midi和Mp3文件的方法
2015/04/24 Python
网红编程语言Python将纳入高考你怎么看?
2018/06/07 Python
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
python3判断url链接是否为404的方法
2018/08/10 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
2019/08/09 Python
使用python模拟命令行终端的示例
2019/08/13 Python
python 监测内存和cpu的使用率实例
2019/11/28 Python
美国第二大连锁书店:Books-A-Million
2017/12/28 全球购物
维氏瑞士军刀英国网站:Victorinox英国
2019/07/04 全球购物
淘宝中秋节活动方案
2014/01/31 职场文书
银行开户授权委托书格式
2014/10/10 职场文书
不尊敬老师检讨书范文
2014/11/19 职场文书
windows server2012 R2下安装PaddleOCR服务的的详细步骤
2022/09/23 Servers