微信公众号开发者接入:如何正确处理和转码Emoji表情的UTF-8编码

在访问微信官方帐户开发人员时,在与用户的对话和互动中,所涉及的文本信息不仅像文本一样简单,而且还可能包含各种表情符号字符,例如“表情符号表情符号”。

微信公众号开发者接入:如何正确处理和转码Emoji表情的UTF-8编码

百科全书:表情符号

由于微信接口中的表情符号表达式使用UTF-8二进制字符串并且未被解码,这意味着当微信用户发送的表情符号表达式时,它将显示为正方形“”或无法显示。此时需要转码字符。同样,当将Emojib表达式的短信发送到微信服务器时,需要将表情符号字符编码到此格式中并发送(网站可以直接发送Unicode代码以显示表情符号表达式,但现在不再支持它)。

每个表情符号表达式实际上都有相应的Unicode编码。在分析用户发送到官方帐户的文本中的表情符号字符时,我们可以根据Unicode代码匹配或存储表情符号表达式;同样,在表情符号的短信时向用户发送包含,表情符号字符将根据Unicode编码然后发送二进制二进制。在这里,我们建议使用SoftBank版本的表情符号编码进行Unicode转换,例如,“ U+E04A”转换为与Wechat匹配的“ \ UE04A”。文章以我转换的Emoji Unicode编码数据表结尾,可以将其与github.com/iamcal/php-emoji的样式表和图片结合使用。

这是我的方法。首先,收集消息时的解析部分:

收到可能包含表情符号表达式的文本内容后,您可以将JSON_ENCODE($ str)($ str)用于JSON编码。此时,消息中的表情符号,中文和其他字符将转换为Unicode编码和显示。 (这里编码的JSON是为了获得字符的Unicode代码,因此无需添加可选参数即可避免JSON_ENCODE函数中的Unicode)

例如:“ Hello hello Hello 123”将编码为“ \ U4F60 \ U597D \ UE415 Hello 123”

字符中的\ ue415是表情符号表达式。目前,我们可以定期对角色进行定期判断,以滤除哪些表情符号表达式。我的方法是逃避表情符号Unicode字符串的后斜线,然后还原字符JSON_DECODE,以便可以恢复表情符号以外的其他字符(不会影响中文和其他字符),仅留下表情符号Unicode代码。

您还可以使用其他方法,例如制作标记和替换,例如用“ [em:ue415]”替换“ \ ue415”,这与qq sipticon相似,当您需要显示文本和表达时,它可以方便。渲染与表情符号字符匹配的渲染。或者,您可以将其直接用HTML IMG标签替换以保存表情符号图像,但这不利于维护。

我使用的常规,粗糙和简单,并选择了ue000 -uefff之间的字符作为表情符号。暂时没有发现意外损害:

$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

之后,可以存储信息。当读取信息并可以替换页面并渲染模板时。

在这里,您可以参考该项目为Emoticon渲染提供的样式表和图片:github.com/iamcal/php-emoji

这是发送部分,更简单:

对于包含表情符号的短信,您可以将其Unicode字符放在首位,或者现在使用该段落来举例说明:“ Hello \ ue415 Hello 123”。

然后在文本中使用常规过滤器删除表情符号Unicode,执行二进制包,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

这将将其发送到微信服务器。

附件是我使用的表情符号Unicode的编码数据表:Mc-Zone/emoji-code。根据软银编码转换的Unicode值(SOFTB_UNICODE字段)被添加到数据中,该数据可以匹配微信中使用的数据。

表情符号数据和CSS样式名称是指此项目:github.com/iamcal/php-emoji,可以组合使用。

你可能想看:
« 上一篇
下一篇 »

相关推荐

php实时推送,php实地培训

2026年10月05日

48阅读

php乱码出现问号的原因,php乱码出现问号的原因有哪些

2026年10月05日

40阅读

php一句话木马,一句话木马ctf

2026年10月05日

43阅读

php获取数组长度,php中如何获取数组的长度

2026年10月05日

44阅读

php面试题库及答案,php程序员面试真题库

2026年10月05日

42阅读

phpcontent-type修改,php源码二次修改需要多少钱

2026年10月05日

38阅读