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函数
Oct 09 PHP
PHP 变量类型的强制转换
Oct 23 PHP
PHP 数据结构 算法 三元组 Triplet
Jul 02 PHP
php中stream(流)的用法
Mar 25 PHP
PHP中的多行字符串传递给JavaScript的两种方法
Jun 19 PHP
php事务处理实例详解
Jul 11 PHP
PHP中list()函数用法实例简析
Jan 08 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
May 19 PHP
php 人员权限管理(RBAC)实例(推荐)
May 24 PHP
PHP手机号中间四位用星号*代替显示的实例
Jun 02 PHP
php的命名空间与自动加载实现方法
Aug 25 PHP
mysqli扩展无法在PHP7下升级问题的解决
Sep 10 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树的代码,可以嵌套任意层
2006/10/09 PHP
php查找任何页面上的所有链接的方法
2013/12/03 PHP
php中base64_decode与base64_encode加密解密函数实例
2014/11/24 PHP
php7安装yar扩展的方法详解
2017/08/03 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
2019/09/16 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
js实现ASP分页函数 HTML分页函数
2006/09/22 Javascript
javascript实用小函数使用介绍
2013/11/11 Javascript
Yii2使用Bootbox插件实现自定义弹窗
2015/04/02 Javascript
jquery左右全屏大尺寸多图滑动效果代码分享
2015/08/28 Javascript
JavaScript中iframe实现局部刷新的几种方法汇总
2016/01/06 Javascript
Bootstrap项目实战之子栏目资讯内容
2016/04/25 Javascript
在javascript中使用com组件的简单实现方法
2016/08/17 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
2016/10/14 Javascript
微信小程序实现用table显示数据库反馈的多条数据功能示例
2019/05/07 Javascript
Python随机生成数模块random使用实例
2015/04/13 Python
python3+PyQt5自定义视图详解
2018/04/24 Python
django将图片上传数据库后在前端显式的方法
2018/05/25 Python
pytz格式化北京时间多出6分钟问题的解决方法
2019/06/21 Python
python time.sleep()是睡眠线程还是进程
2019/07/09 Python
TensorFlow 多元函数的极值实例
2020/02/10 Python
详解django使用include无法跳转的解决方法
2020/03/19 Python
Python脚本导出为exe程序的方法
2020/03/25 Python
Tensorflow加载Vgg预训练模型操作
2020/05/26 Python
移动HTML5前端框架—MUI的使用
2017/12/18 HTML / CSS
初中生期末考试的自我评价
2013/12/17 职场文书
办公室前台的岗位职责
2013/12/20 职场文书
大学生村官任职感言
2014/01/09 职场文书
安全资金保障制度
2014/01/23 职场文书
普罗米修斯教学反思
2014/02/06 职场文书
校庆口号
2014/06/20 职场文书
个人租房协议书范本
2014/09/30 职场文书
2014员工聘用协议书(最新版)
2014/11/24 职场文书
证券区域经理岗位职责
2015/04/10 职场文书
企业安全生产检查制度
2015/08/06 职场文书
尝试使用Python爬取城市租房信息
2022/04/12 Python