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和js交互一例-PHP教程,PHP应用
Jan 03 PHP
PHP中去除换行解决办法小结(PHP_EOL)
Nov 27 PHP
PHP合并两个数组的两种方式的异同
Sep 14 PHP
PHP面向对象学习笔记之一 基础概念
Oct 06 PHP
PHP 登录记住密码实现思路
May 07 PHP
PHP删除数组中特定元素的两种方法
Jul 02 PHP
PHP基于正则批量替换Img中src内容实现获取缩略图的功能示例
Jun 07 PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
Nov 20 PHP
微信支付之JSAPI公众号支付详解
May 15 PHP
PHP中的自动加载操作实现方法详解
Aug 06 PHP
php扩展开发入门demo示例
Sep 23 PHP
PHP 实现base64编码文件上传出现问题详解
Sep 01 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下获取http状态的实现代码
2014/05/09 PHP
php用户注册信息验证正则表达式
2015/11/12 PHP
php支付宝系列之电脑网站支付
2018/05/30 PHP
PHP7中I/O模型内核剖析详解
2019/04/14 PHP
关于laravel框架中的常用目录路径函数
2019/10/23 PHP
JavaScript基础语法让人疑惑的地方小结
2012/05/23 Javascript
jQuery插件的写法分享
2013/06/12 Javascript
js取得html iframe中的元素和变量值
2014/06/30 Javascript
node.js中的console.trace方法使用说明
2014/12/09 Javascript
jQuery中index()方法用法实例
2014/12/27 Javascript
JavaScript实现在标题栏上显示当前日期的方法
2015/03/19 Javascript
jquery实现标签上移、下移、置顶
2015/04/26 Javascript
JavaScript+html5 canvas绘制的圆弧荡秋千效果完整实例
2016/01/26 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
2016/08/05 Javascript
给easyui datebox扩展一个清空的实例
2016/11/09 Javascript
JS 实现计算器详解及实例代码(一)
2017/01/08 Javascript
ES6学习教程之对象的扩展详解
2017/05/02 Javascript
Javascript调试之console对象——你不知道的一些小技巧
2017/07/10 Javascript
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
vue实现导航菜单和编辑文本的示例代码
2020/07/04 Javascript
[01:14]DOTA2亚洲邀请赛 ShowOpen
2015/02/07 DOTA
python去掉空白行的多种实现代码
2018/03/19 Python
python 生成图形验证码的方法示例
2018/11/11 Python
使用Python正则表达式操作文本数据的方法
2019/05/14 Python
python画图的函数用法以及技巧
2019/06/28 Python
python将excel转换为csv的代码方法总结
2019/07/03 Python
利用python查看数组中的所有元素是否相同
2021/01/08 Python
倩碧英国官网:Clinique英国
2018/08/10 全球购物
速卖通欧盟:Aliexpress EU
2020/08/19 全球购物
英语教师自荐信
2014/05/26 职场文书
党的群众路线教育实践活动总结报告
2014/07/03 职场文书
学校消防安全责任书
2014/07/23 职场文书
班级班风口号大全
2015/12/25 职场文书
用Python监控你的朋友都在浏览哪些网站?
2021/05/27 Python
Python matplotlib绘制雷达图
2022/04/13 Python
Win11 21h2可以升级22h2吗?看看你的电脑符不符合要求
2022/07/07 数码科技