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中关于抽象(abstract)类和抽象方法的问题分析
Jan 03 PHP
PHP遍历数组的方法汇总
Apr 30 PHP
php创建无限级树型菜单
Nov 05 PHP
yii2.0使用Plupload实现带缩放功能的多图上传
Dec 22 PHP
php ajax异步读取rss文档数据
Mar 29 PHP
PHP微信开发之查询微信精选文章
Jun 23 PHP
thinkPHP框架可添加js事件的分页类customPage.class.php完整实例
Mar 16 PHP
解析 thinkphp 框架中的部分方法
May 07 PHP
php提交表单时保留多个空格及换行的文本样式的方法
Jun 20 PHP
PHP htmlentities()函数用法讲解
Feb 25 PHP
php定期拉取数据对比方法实例
Sep 22 PHP
php pdo连接数据库操作示例
Nov 18 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
长波知识介绍
2021/03/01 无线电
PHP用户指南-cookies部分
2006/10/09 PHP
PHP中常用的字符串格式化函数总结
2014/11/19 PHP
PHP命名空间和自动加载类
2016/04/03 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
2016/04/12 PHP
Yii2组件之多图上传插件FileInput的详细使用教程
2016/06/20 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
2016/11/14 PHP
详解json在php中的应用
2018/09/30 PHP
Tab页界面,用jQuery及Ajax技术实现
2009/09/21 Javascript
JavaScript中的onerror事件概述及使用
2013/04/01 Javascript
IE8下Jquery获取select选中的值post到后台报错问题
2014/07/02 Javascript
解决JS请求服务器gbk文件乱码的问题
2015/10/16 Javascript
js时间戳和c#时间戳互转方法(推荐)
2017/02/15 Javascript
JQuery 封装 Ajax 常用方法(推荐)
2017/05/21 jQuery
JS大坑之19位数的Number型精度丢失问题详解
2019/04/22 Javascript
nodejs中内置模块fs,path常见的用法说明
2020/11/07 NodeJs
python列出目录下指定文件与子目录的方法
2015/07/03 Python
Python编程入门之Hello World的三种实现方式
2015/11/13 Python
使用python存储网页上的图片实例
2018/05/22 Python
2019 Python最新面试题及答案16道题
2019/04/11 Python
Python定时任务随机时间执行的实现方法
2019/08/14 Python
win10系统下python3安装及pip换源和使用教程
2020/01/06 Python
在TensorFlow中屏蔽warning的方式
2020/02/04 Python
Python爬取酷狗MP3音频的步骤
2021/02/26 Python
如何在Canvas中添加事件的方法示例
2019/05/21 HTML / CSS
美国手工艺品市场的领导者:Annie’s
2019/04/04 全球购物
彪马荷兰官网:PUMA荷兰
2019/05/08 全球购物
Linux管理员面试经常问道的相关命令
2014/12/12 面试题
模特职业生涯规划范文
2014/02/26 职场文书
篮球比赛拉拉队口号
2014/06/10 职场文书
部门2014年度工作总结
2014/11/12 职场文书
年度考核表个人总结
2015/03/06 职场文书
销售经理助理岗位职责
2015/04/13 职场文书
青年人初次创业的“五不要”
2019/08/23 职场文书
导游词之云南-元阳梯田
2019/10/08 职场文书
Oracle 多表查询基本语法实例
2022/04/18 Oracle