微信公众号API返回不可打印字符的处理。

时间:2021-09-19 23:40:08

引言

在使用微信公众号的“批量获取用户基本信息”API时,发现在某些时候不能使用php的json_decode转为数组,打印出curl获取到的内容中,发现了几个不可打印字符。相信不少朋友都应该发现了这个问题吧?

1.在firefox中,不可打印字符通过特殊的处理可以显示出来具体是哪一个不可打印字符。当然用sublime text也能看到不可打印字符会高亮显示。

微信公众号API返回不可打印字符的处理。
可以看出是x0010和x0090,其中x0010是不可打印字符。
微信公众号API返回不可打印字符的处理。,x0010显示为高亮的"DLE",

2.替换掉不可打印字符后能正常的转为数组了:

$data = preg_replace('/[\x{0}-\x{1f}]/u', '', $data);

3.查看全部的不可打印字符在sublime中显示情况:

<?php
for($i=0;$i<32;$i++)
{
echo $i." = ".chr($i);
}
?>

微信公众号API返回不可打印字符的处理。

可以看出每一个“小方框”中的数字是对应的。在谷歌浏览器中是完全过滤掉控制字符的。

微信公众号API返回不可打印字符的处理。
微信公众号API返回不可打印字符的处理。

4.这些字符可能是emoji引起,那是不是所有emoji都不能转为数组呢?答案是否定的。

目前不知道为什么原因导致微信api会返回非可打印字符,但其他utf8mb4编码(主要是emoji)的字符是可以被json_decode的。例如:
微信公众号API返回不可打印字符的处理。