您的位置 首页 php

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

通过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时,可以直接通过下面的代码实现:

<?php

$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时,只能自己写一个方法递归进行处理了,方法内容如下:

<?php
function array_urlencode(&$ary)
{
  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);
?>
 

文章来源:智云一二三科技

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

文章地址:https://www.zhihuclub.com/77016.shtml

关于作者: 智云科技

热门文章

网站地图