方法是:

方法是:return json_decode(preg_replace("#(\\\ue[0-9a-f]{3}|\\\ud83e|\\\udd14)#ie", "", json_encode($text)));

原理是:

进行微信公众号开发者接入的时候,与用户的对话互动中,涉及到的文本信息不仅仅是文字那么简单,其中可能还会包含着各种表情字符,例如「emoji表情」。

百科: Emoji

由于微信接口中对于emoji表情使用的是UTF-8的二进制字符串,并没有解码,表现就是当收到微信端用户发来的emoji表情时,显示为一 个方块型「」或是无法显示的字符,这时就需要对其进行转码。同理在向微信服务器发送带有emojib表情的文本消息时,也需要将表情字符编码为此格式进 行发送(早前微信可以直接发送unicode码显示emoji表情,但是现在已经不支持了)。

每个emoji表情其实都有相应的unicode编码,在解析用户向公众号发送的文字中的emoji表情字符时,我们可以根据unicode码来匹配或存 储信息中的emoji表情;同理在向用户发送包含emoji表情的文字消息时,则将表情字符根据unicode编码进行二进制转码后再发送。这里推荐使用 softbank版本的emoji编码进行unicode转换,例如,”U+E04A” 转换为 “\ue04a”,与微信匹配。文章结尾附上了我转换好的emoji unicode编码数据表,可以与 github.com/iamcal/php-emoji 的样式表和图片相结合。

下面是我的处理方法。 首先是对收取消息时的解析部分

在收到一段可能含有emoji表情的文本内容后,可以简单的使用 json_encode($str) 将其进行JSON编码,此时消息中的表情、中文等字符将会被转为unicode编码显示。(这里进行JSON编码就是为了获得字符的unicode码,所 以json_encode函数中不需要增加避免unicode的可选参数了)

例如: “你好  hello 123″ 将被编码为” \u4f60\u597d \ue415 hello 123 “

字符中的\ue415就是一个emoji表情,此时我们就可以对字符进行正则判断来筛选出哪些是emoji表情了。我的做法是 把emoji的unicode字符串反斜杠转义,然后再将字符json_decode还原,这样就可以将除了emoji之外的字符还原(不会影响到中文等其他字符),只留下emoji的unicode码 。

你也可以用别的方法,比如做一个标记和替换,例如将”\ue415″替换为”[em:ue415]“,类似于QQ表情的做法,在需要显示文本和 表情的时候,就可以方便的对表情字符做出匹配渲染。或者也可以直接把他替换成HTML的img标签把表情图片存进去,但是这样不利于维护。

我使用的正则粗暴简单,选择了 ue000 – uefff 之间的字符视为emoji,暂时没有发现误伤:

$str = preg_replace("#(\\\ue[0-9a-f]{3})#ie","addslashes('\\1')",$str);

整个过程完整代码如下:

$text = "你好  hello 123"; //可以为收到的微信消息,可能包含二进制emoji表情字符串
$tmpStr = json_encode($text); //暴露出unicode $tmpStr = preg_replace("#(\\\ue[0-9a-f]{3})#ie","addslashes('\\1')",$tmpStr); //将emoji的unicode留下,其他不动 $text = json_decode($tmpStr); echo $text;//你好 \ue415 hello 123

之后就可以存储信息了,在读取出信息到页面的时候就可以进行字符替换和模板渲染了。

这里可以参考这个项目提供的样式表和图片进行表情渲染: github.com/iamcal/php-emoji

下面是 发送部分 ,就更简单了:

对于一条包含emoji的文本消息,可以先放入其unicode字符,还是拿刚才的这段来举例子:”你好 \ue415 hello 123 “。

然后 使用正则筛选出文本中的emoji unicode,对其进行二进制pack,UTF8转码,再放入原文本中 即可(这一步应该在消息发送前最后来做,先准备好完整的文本消息再进行转码处理)。代码如下:

$text = "你好 \ue415 hello 123"; //可以为将要发送的微信消息,包含emoji表情unicode字符串,需要转为utf8二进制字符串
$text = preg_replace("#\\\u([0-9a-f]+)#ie","iconv('UCS-2','UTF-8', pack('H4', '\\1'))",$text); //对emoji unicode进行二进制pack并转utf8 echo $text;//你好  hello 123

转载于:https://www.cnblogs.com/wlemory/p/4955802.html

微信去除EMOJI表情相关推荐

  1. 微信消息收发与微信内部emoji表情转义

    微信消息收发与微信内部emoji表情转义 目录 微信内部emoji表情转义与消息收发 一.概述 二.常用标准emoji表情字符.微信内部转义符.unicode对照表 1.比如 2.微信聊天窗口emoj ...

  2. 解决微信登录Emoji表情昵称乱码问题

    可以自己动手尝试一下此解决方案 GitHub - gzu-liyujiang/UnicodeEmoji: Unicode&Emoji处理工具类,可用于解决微信登录Emoji表情昵称乱码问题,含 ...

  3. android没有捂脸表情,微信新emoji表情安卓机怎么没有?微信新emoji表情安卓机没有怎么回事?...

    在最新版ios版微信中不少用户在聊天时发现了新emoji表情哟,但是安卓机最新版即没有发现,那么微信新emoji表情安卓机怎么没有?微信新emoji表情安卓机没有怎么回事?下面小编就给大家具体介绍下. ...

  4. android没有捂脸表情,微信新emoji表情有哪些 新emoji表情安卓机怎么没有

    微信新emoji表情全面上线,搞怪的表情让很多用户忍俊不禁,刚刚上线就受到大家的欢迎,还没有使用的小伙伴看这个,小编给大家详细的讲讲吧. 微信新emoji表情一览 继苹果在iOS10.2测试版本新增了 ...

  5. java去除emoji表情等特殊字符。

    java去除emoji表情等特殊字符.保留html标签 package test;import java.util.regex.Matcher; import java.util.regex.Patt ...

  6. 微信昵称emoji表情,特殊表情导致列表不显示,导出EXCEL报错等问题解决!

    微信昵称emoji表情,特殊表情导致列表不显示,导出EXCEL报错等问题解决! 参考文章: (1)微信昵称emoji表情,特殊表情导致列表不显示,导出EXCEL报错等问题解决! (2)https:// ...

  7. php mysql 微信昵称_php 解决微信昵称emoji表情插入MySQL报错

    在PHP接受到微信用户昵称入库的时候报错 原因:utf-8 最大3个字节,而emoji占4个字节 解决办法: 1.修改mysql 数据库的字符集,改为utf8mb4,但是前提是MySQL的版本需要5. ...

  8. java过滤微信昵称emoji表情

    注:核心代码为转载 最近在开发中遇到要过滤掉微信名称中的表情,再入库的功能:在找了多篇实现验证后,发现排名在前的文章们竟然有bug,最终找到以下实现,验证后符合要求,特此记录一下. import ja ...

  9. mysql 过滤微信昵称表情_微信昵称emoji表情的过滤

    前言 微信昵称现在五花八门,可以加入各种表情符号.这些符号存储到mysql数据库时存在一些问题.这里记录下我的解决方法. 问题 第一种方案:修改数据库编码,支持存储emoji表情 mysql的utf8 ...

最新文章

  1. stream流map 多个字段_stream流根据对象指定字段去重
  2. Anaconda中pytorch环境搭建(包括详细的虚拟环境创建,以及虚拟环境中jupyter notebook的使用)
  3. python编写请求参数带文件_python requests 库请求带有文件参数的接口实例
  4. eclipse 打开时候,弹出来 JVM terminated Exit code=2
  5. Mysql悲观锁乐观锁区别使用区别
  6. 读取CSV内容,根据不同的图片标签放到指定文件夹
  7. android之SharedPreferences
  8. 详细介绍如何在Eclipse中使用SVN
  9. xtrabackup mysql 5.6_percona-xtrabackup工具实现mysql5.6.34的主从同步复制
  10. AUTOSAR从入门到精通100讲(十八)-AUTOSAR操作系统OS
  11. 只有设置了 name 属性的表单元素才能在提交表单时传递它们的值
  12. JavaScript ES2019的新增功能
  13. 数值分析:插值与拟合
  14. neo4j unwind
  15. java如何连接Oracle数据库问题
  16. Android计算器(仿小米计算器)
  17. 2021Android高级面试题总结,挥泪整理面经
  18. 什么是DTC?为什么国内外如此火爆
  19. 【已解决】体视显微镜左右成像大小不一致
  20. 对Aurora8b10b的简要理解

热门文章

  1. 五行基础_ywyuan_新浪博客
  2. onChange和onClick的区别
  3. 阿里云安装 Redis ,win10使用RDM连接管理redis
  4. STM32学习笔记-USART串口通信+与野火STM32F407板载ESP8266进行通信
  5. 个人总结面试笔试C语言、嵌入式相关基础知识点
  6. 用计算机制作微课教学教案,微课教学设计范文
  7. STM32F429I-Discovery学习笔记--(1)简单上手和官方例程的下载与使用
  8. 大智精英汇:赤裸裸的解刨创业的思路
  9. C/C++百行代码实现热门游戏-消消乐
  10. 哔哩哔哩老显示服务器中断,哔哩哔哩服务器不能正常播放怎么办_bilibili服务器无法正常播放的解决办法_牛游戏网...