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 ss7.5的数据调用 (笔记)
Mar 08 PHP
数组与类使用PHP的可变变量名需要的注意的问题
Jun 20 PHP
php去除HTML标签实例
Nov 06 PHP
php中mkdir函数用法实例分析
Nov 15 PHP
一个非常完美的读写ini格式的PHP配置类分享
Feb 12 PHP
ThinkPHP3.2.3数据库设置新特性
Mar 05 PHP
整理php防注入和XSS攻击通用过滤
Sep 13 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
Dec 24 PHP
php实现留言板功能
Mar 05 PHP
YII框架批量插入数据的方法
Mar 18 PHP
PHP curl 或 file_get_contents 获取需要授权页面的方法
May 05 PHP
laravel框架中视图的基本使用方法分析
Nov 23 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单例模式实现方法分析
2015/03/14 PHP
实例讲解yii2.0在php命令行中运行的步骤
2015/12/01 PHP
Symfony2中被遗弃的getRequest()方法分析
2016/03/17 PHP
JS array 数组详解
2009/03/22 Javascript
jquery实现从数组移除指定的值
2015/06/24 Javascript
JS获取子窗口中返回的数据实现方法
2016/05/28 Javascript
浅谈js中字符和数组一些基本算法题
2016/08/15 Javascript
JavaScript 深层克隆对象详解及实例
2016/11/03 Javascript
JS设置时间无效问题的解决办法
2017/02/18 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
vue实现的网易云音乐在线播放和下载功能案例
2019/02/18 Javascript
vue-loader中引入模板预处理器的实现
2019/09/04 Javascript
vue keep-alive列表页缓存 详情页返回上一页不刷新,定位到之前位置
2019/11/26 Javascript
jquery实现烟花效果(面向对象)
2020/03/10 jQuery
使用go和python递归删除.ds store文件的方法
2014/01/22 Python
利用Python和OpenCV库将URL转换为OpenCV格式的方法
2015/03/27 Python
Python使用gensim计算文档相似性
2016/04/10 Python
Python编码爬坑指南(必看)
2016/06/10 Python
Python使用pickle模块存储数据报错解决示例代码
2018/01/26 Python
Django实战之用户认证(用户登录与注销)
2018/07/16 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
2019/08/28 Python
python实现KNN分类算法
2019/10/16 Python
Python日期格式和字符串格式相互转换的方法
2020/02/18 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
2020/07/02 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
2020/07/14 Python
Python 创建TCP服务器的方法
2020/07/28 Python
Visual Studio code 配置Python开发环境
2020/09/11 Python
办公室文秘自我评价
2013/09/21 职场文书
村党支部公开承诺书
2014/05/29 职场文书
工商管理专业自荐信
2014/06/03 职场文书
2014年远程教育工作总结
2014/12/09 职场文书
幼儿园小班班务总结
2015/08/03 职场文书
创业计划书之酒厂
2019/10/14 职场文书
MySQL官方导出工具mysqlpump的使用
2021/05/21 MySQL
ConstraintValidator类如何实现自定义注解校验前端传参
2021/06/18 Java/Android
浅谈css清除浮动(clearfix和clear)的用法
2023/05/21 HTML / CSS