背景:
随着手机的普及,现在移动开发很火爆,已经远远超过了pc端。
在移动设备经常会发生用户发送的内容中包含emoji表情,在显示时就是乱码。
一般是因为Mysql表设计时,都是用UTF8字符集的。把带有emoji的昵称字段往里面insert一下就没了,整个字段变成了空字符串。
这是因为Mysql的utf8字符集是3字节的,而emoji是4字节,这样整个昵称就无法存储了。

现在介绍在PHP开发中涉及到emoji表情的三种处理方法:
1)使用utf8mb4字符集
如果你的mysql版本>=5.5.3,你大可直接将utf8直接升级为utf8mb4字符集
这种4字节的utf8编码可完美兼容旧的3字节utf8字符集,并且可以直接存储emoji表情,是最好的解决方案
至于字节增大带来的性能损耗,我看过一些评测,几乎是可以忽略不计的

2)使用base64编码
如果你因为某些原因无法使用utf8mb4的话,你还可以使用base64来曲线救国
使用例如base64_encode之类的函数编码过后的emoji可以直接存储在utf8字节集的数据表中,取出时base64_decode一下即可

3)去掉emoji表情
在iOS以外的平台上,例如PC或者android。如果你需要显示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;}

当然你也可以直接在客户端过滤,禁止输入表情和颜文字。这样更加直接有效。

总结:
我个人在App开发中也遇到了这个问题,权衡对比了一下三个方法。
方法一是改字符集编码, 这个成本有一点高,而且怕改了后影响其他的程序,所以忽略了这个方法。
方法三,可以过滤Emoji表情,但是不能对颜文字进行过滤,也不能满足所有需求。因为Mysql的utf8字符集是3字节的,而emoji是4字节,数据库还是不能保存。
综合考虑所以最后选择base64编码。这个方法比较简单,对于Emoji表情和颜文字也都兼容。
只是写入的时候要base64_encode,读取的时候要base64_decode一下。
base64的缺点就是每次读数据还得base64_decode一下,而且保存的数据不直观。
但是相对我们的情况,这个方法是最靠谱的。风险小也能解决问题。
当然也可以直接在客户端过滤,禁止输入表情和颜文字,这样更加直接有效。但是这得重新发包,不能及时解决问题。

效果图如下:

ios:

andriod:

php开发中处理emoji表情和颜文字的兼容问题相关推荐

  1. php 微信表情存储,轻松处理PHP开发中微信emoji表情mysql存储的问题

    背景 做微信开发的时候发现,微信支持emoji表情做昵称,结果考虑不周 Mysql表设计时,都是用UTF8字符集的.把带有emoji的昵称字段往里面insert一下就没了,整个字段变成了空字符串.有的 ...

  2. 微信小程序中使用emoji表情相关说明

    本帖将聚合一些跟emoji表情有关的知识:前端传过来的昵称和备注信息一定要经过严格的正则表达式过滤,放置出现XSS等攻击,另外emoji字体表情库应该使用base64_encode编码,拿信息的时候b ...

  3. php emoji表情,PHP处理字符中的emoji表情

    业务场景,开发的小程序和APP需要类似朋友圈一样的功能,然后好多客户都需要发带emoji表情的文字 所以,这里说一下php如何处理字符中的emoji表情 utf-8 编码的 emoji 表情或者某些特 ...

  4. 前端显示微信消息中的emoji表情

    本人是微信公众号口开发,发现一些用户发送过来的消息含有emoji表情,然后存到数据库不能正确显示,读出来都是"口口口",这个问题问到我了,我是一个前端小白,对于这种问题,我是很苦恼 ...

  5. 判断字符串是否含有emoji表情或者颜文字(非键盘可输入的特殊字符)

    这里写自定义目录标题 判断字符串是否含有emoji表情或者颜文字(非键盘可输入的特殊字符) 判断字符串是否含有emoji表情或者颜文字(非键盘可输入的特殊字符) 最近遇到一个特别有意思的自动化测试小姐 ...

  6. php转换emoji表情为图片输出小程序,微信小程序中使用emoji表情相关说明

    本帖将聚合一些跟emoji表情有关的知识:相关文章:"i爱记账" 小程序后端开发小结 第7条经验前端传过来的昵称和备注信息一定要经过严格的正则表达式过滤,放置出现XSS等攻击,另外 ...

  7. MySQL 字符串删除表情符_PHP处理字符中的emoji表情(判断/移除/存储)

    目录判断字符串中是否含有 emoji 表情 移除字符串中的 emoji 表情 含有 emoji 表情的字符串在 MySQL 中的储存 utf-8 编码的 emoji 表情或者某些特殊字符占用 4 个字 ...

  8. 在博客中插入emoji表情

    在博客Markdown编辑器中插入emoji表情? 利用三种不同方法在博客.网页.markdown编辑器中插入emoji表情.? 在写博客时,经常希望能够用一些表情表达自己想法,但是默认的markdo ...

  9. markdown中添加Emoji表情让文章更有趣味

    markdown表情 在文章中添加Emoji表情,可以添加文章的趣味性,Emoji使用规则是双::中间加单词 查看全文 http://www.taodudu.cc/news/show-4737612. ...

  10. mysql存储emoji表情_MySQL中支持emoji表情的存储

    由于需要实现emoji表情评论的功能,所以数据库需要支持emoji表情的存储,根据查询的资料最终实现了该功能,现将实现的过程以及过程遇到的一些问题记录下来,供大家参考和交流. mysql的utf8编码 ...

最新文章

  1. 知名高校共享课程资源GitHub地址
  2. java单元测试启动类配置_Springboot 单元测试简单介绍和启动所有测试类的方法
  3. 论文: Generating Software Test Data by Evolution---自己觉得很好的句子----(1)introduction
  4. mysql建立数据浏览器_一个简单的MySQL数据浏览器
  5. Xml+Xslt测试工具
  6. 数字化转型知识方法系列之:数字化转型的基本认识与参考架构
  7. gvim文本编辑器帮助_如何帮助您的文本编辑器帮助您
  8. linux php扩展 mysqli,[linux]PHP添加mysqli扩展 | 学步园
  9. python 绘制图表生成svg文件_python用Pygal如何生成漂亮的SVG图像详解
  10. c# 定义委托和使用委托(事件的使用)
  11. 论文笔记_RSS_2014_激光SLAM_LOAM_实时LIDAR定位与建图
  12. 荣之学:关于跨境电商shopee平台,你了解多少?
  13. echarts柱形图x轴y轴的字体大小颜色调整
  14. 计算机组装中如何看硬件型号,如何查看主板型号?(三种方法!)
  15. [翻译完成] 树莓派性能测试
  16. 多因子模型(MFM)
  17. java四叶玫瑰_java编一个四叶玫瑰曲线 不显示曲线
  18. 注册功能课件详解:前后端
  19. USACO 2017 December Contest Platinum T3: Greedy Gift Takers
  20. 为什么产品经理要做市场调研

热门文章

  1. java lua脚本_在Java中使用Lua脚本语言
  2. 计算机中的微信无法启动,微信电脑版无法直接打开EXCEL:为什么电脑打不开excel表格...
  3. DROOPYCTF WALKTHROUGH
  4. 纯css 箭头,纯CSS实现小箭头的案例
  5. google hack 语法(渗透测试google黑客语法)
  6. Google Hack 最新版
  7. java免费单机游戏中心_虚拟网游(单机游戏)
  8. 微信开发者工具上传照片后下载图片一直报40007:invalid media_id hint: [UUtO4a0341d142] rid: 5fd84e4d-5a3
  9. 监听php队列,执行一个队列监听
  10. Java log2x函数的实现