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 empty,isset,is_null判断比较(差异与异同)
Oct 19 PHP
window+nginx+php环境配置 附配置搭配说明
Dec 29 PHP
PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结
Mar 07 PHP
使用PHP和HTML5 FormData实现无刷新文件上传教程
Sep 06 PHP
PHP curl使用实例
Jul 02 PHP
CodeIgniter与PHP5.6的兼容问题
Jul 16 PHP
php下载文件,添加响应头的简单实例
Sep 22 PHP
Laravel学习教程之View模块详解
Sep 18 PHP
PHP使用PDO调用mssql存储过程的方法示例
Oct 07 PHP
php中青蛙跳台阶的问题解决方法
Oct 14 PHP
PHP钩子实现方法解析
May 21 PHP
如何在PHP中使用AES加密算法加密数据
Jun 24 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
我的论坛源代码(二)
2006/10/09 PHP
在PHP3中实现SESSION的功能(二)
2006/10/09 PHP
查找mysql字段中固定字符串并替换的几个方法
2012/09/23 PHP
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
动态刷新 dorado树的js代码
2009/06/12 Javascript
JQuery 小练习(实例代码)
2009/08/07 Javascript
clientX,pageX,offsetX,x,layerX,screenX,offsetLeft区别分析
2010/03/12 Javascript
jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
2011/06/27 Javascript
基于jQuery实现的水平和垂直居中的div窗口
2011/08/08 Javascript
Javascript判断文件是否存在(客户端/服务器端)
2014/09/16 Javascript
AngularJS基础 ng-value 指令简单示例
2016/08/03 Javascript
js 获取元素所有兄弟节点的实现方法
2016/09/06 Javascript
javascript中的后退和刷新实现方法
2016/11/10 Javascript
JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】
2016/12/12 Javascript
原生JS与jQuery编写简单选项卡
2017/10/30 jQuery
jquery自定义显示消息数量
2017/12/19 jQuery
使用vue-router设置每个页面的title方法
2018/02/11 Javascript
JS实现生成由字母与数字组合的随机字符串功能详解
2018/05/25 Javascript
解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题
2019/10/25 Javascript
JS通过识别id、value值对checkbox设置选中状态
2020/02/19 Javascript
2020淘宝618理想生活列车自动领喵币js脚本的代码
2020/06/02 Javascript
[04:19]DOTA2亚洲邀请赛 现场花絮
2015/03/11 DOTA
python类继承与子类实例初始化用法分析
2015/04/17 Python
微信跳一跳小游戏python脚本
2018/01/05 Python
详解numpy的argmax的具体使用
2019/05/27 Python
对Python强大的可变参数传递机制详解
2019/06/13 Python
python3的print()函数的用法图文讲解
2019/07/16 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
2019/09/07 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
2020/06/09 Python
建筑实习自我鉴定
2013/10/18 职场文书
语文教育专业应届生求职信
2013/11/23 职场文书
中学生自我鉴定
2014/02/04 职场文书
技术合作协议书范本
2014/04/18 职场文书
荆州古城导游词
2015/02/06 职场文书
nginx反向代理时如何保持长连接
2021/03/31 Servers
Valheim服务器 Mod修改安装教程 【ValheimPlus】
2022/12/24 Servers