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 ? EasyUI DataGrid 资料取的方式介绍
Nov 07 PHP
使用迭代器 遍历文件信息的详解
Jun 08 PHP
一个显示效果非常不错的PHP错误、异常处理类
Mar 21 PHP
一个基于phpQuery的php通用采集类分享
Apr 09 PHP
浅谈PHP调用Webservice思路及源码分享
Jun 04 PHP
PHP小教程之实现链表
Jun 09 PHP
配置php.ini实现PHP文件上传功能
Nov 27 PHP
php专用数组排序类ArraySortUtil用法实例
Apr 03 PHP
php正则表达式获取内容所有链接
Jul 24 PHP
PHP加密解密实例分析
Dec 25 PHP
9个比较实用的php代码片段
Mar 15 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
Sep 30 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
php中mysql操作buffer用法详解
2015/03/19 PHP
PHP借助phpmailer发送邮件
2015/05/11 PHP
php强制下载文件函数
2016/08/24 PHP
HTML代码中标签的全部属性 中文注释说明
2009/03/26 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
2014/01/28 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
jQuery中unwrap()方法用法实例
2015/01/16 Javascript
有效提高JavaScript执行效率的几点知识
2015/01/31 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
纯css下拉菜单 无需js
2016/08/15 Javascript
JavaScript代码里的判断小结
2016/08/22 Javascript
javascript使用递归算法求两个数字组合功能示例
2017/01/03 Javascript
在js代码拼接dom对象到页面上去的模板总结(必看)
2017/02/14 Javascript
BootStrap fileinput.js文件上传组件实例代码
2017/02/20 Javascript
angular1.x ui-route传参的三种写法小结
2018/08/31 Javascript
nodejs aes 加解密实例
2018/10/10 NodeJs
angular6开发steps步骤条组件
2019/07/04 Javascript
[03:19]2016国际邀请赛中国区预选赛第四日TOP10镜头集锦
2016/07/01 DOTA
Python ZipFile模块详解
2013/11/01 Python
pycharm 使用心得(八)如何调用另一文件中的函数
2014/06/06 Python
Python实现测试磁盘性能的方法
2015/03/12 Python
python基础教程项目五之虚拟茶话会
2018/04/02 Python
Django中反向生成models.py的实例讲解
2018/05/30 Python
搞定这套Python爬虫面试题(面试会so easy)
2019/04/03 Python
英国经济型酒店品牌:Travelodge
2019/12/17 全球购物
Under Armour安德玛意大利官网:美国高端运动科技品牌
2020/01/16 全球购物
全球性的众包图形设计市场:DesignCrowd
2021/02/02 全球购物
我的梦想演讲稿1000字
2014/08/21 职场文书
九一八事变纪念日演讲稿
2014/09/14 职场文书
重阳节标语大全
2014/10/07 职场文书
企业党员岗位承诺书
2015/04/27 职场文书
2015年党建工作目标责任书
2015/05/08 职场文书
世界名著读书笔记
2015/06/25 职场文书
新闻稿标题
2015/07/18 职场文书
python 统计代码耗时的几种方法分享
2021/04/02 Python
golang特有程序结构入门教程
2021/06/02 Python