推送微信消息中文乱码解决方法,和通过递归对数组进行urlencode

2022-10-11 21:14:43 179 0
魁首哥

通过curl往微信api接口推送微信客服消息时,如果出现乱码的情况,是因为通过json_encode方法将数组转换为 json 时,json_encode方法将 字符串 转换为了 unicode 编码。

避免出现乱码最简单的方式是在json_encode方法里加入JSON_UNESCAPED_UNICODE参数,让json_encode方法不将中文转换为unicode编码,但是,json_encode函数只有在php5.4以后的版本才支持这个参数,在某些生成环境,用的是老版本的php,没办法直接加JSON_UNESCAPED_UNICODE参数,只能用别的方法解决。

用的方法是先将字符串进行 urlencode ,然后再执行json_encode,在得到json字符串后,再urldecode一下得到最终没有乱码的字符串。

通常我们推送微信消息的时候,都是将数组转换为json,如果是一维数组,我们在用urlencode时,可以直接通过下面的代码实现:

$dataAry = [“title” => “中文标题”, “desc” => “中文描述”,”content”=>”中文正文”];

$encodeAry = array_map(‘urlencode’, $dataAry);

$jsonStr = json_encode($encodeAry);

var_dump($jsonStr);

$decodeStr = urldecode($jsonStr);

var_dump($decodeStr);

?>

但是,我们通常数组结构是多维的,也就是数组里包含有数组,这时,使用array_map(‘urlencode’,$dataAry)方法就会出错,会提示:Warning: urlencode() expects parameter 1 to be string, array given。

这时,如果是多级数组进行urlencode时,只能自己写一个方法递归进行处理了,方法内容如下:

foreach  ($ary as $k => $v) {
 if (is_array($v)) {
 array_urlencode($ary[$k]);
 }else{
 $ary[$k]=urlencode($v);
 }
 }
}
$dataAry = [
 "article1"=>["title" => "中文标题", "desc" => "中文描述","content"=>"中文正文"],
 "article2"=>["title" => "中文标题", "desc" => "中文描述","content"=>"中文正文"],
 ];
array_urlencode($dataAry);
$jsonStr = json_encode($dataAry);
var_dump($jsonStr);
$decodeStr = urldecode($jsonStr);
var_dump($decodeStr);
?>
 

收藏
分享
海报
0 条评论
179
上一篇:紧急:图像处理软件ImageMagick存在远程代码执行漏洞 下一篇:教你利用PHP制作一个奇葩聊天机器人

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码