PHP客户端访问服务器端网页获取相应中文通常有两种方法,直接获取或者封装成json,但封装成json时不做一定的处理将出现无法解析问题,下面对两种方法分别做相应的例子:
一、直接获取
被访问端(服务器 chinese.php ):
<?php
$data['id'] = 1;
$data['name'] = "中文乱码";
print_r($data); //var_dump($data); 两者结果相似
?>
访问端(客户端 getchinese.php):
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://域名/chinese.php' );
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
$str = curl_exec($ch);
curl_close($ch);
echo $str;
?>
用浏览器打开客户端 getchinese.php ,输出结果:Array ( [id] => 1 [name] => 中文乱码 )
由此可知,直接返回的是一串字符串,你得到想要的内容,还需进行字符分割。
二、封装成json
为了解决方法一的弊端,封装成json进行传输时,接收端识别较为方便,但其在发送端时就得经过一定的处理,否则无法正确识别中文。此种方法有以下两种:
1. utf8加解密
服务端将中文字符串utf8转码后,客户端再utf8解码
被访问端(服务器 chinese.php):
<?php
$data['id'] = 1;
$data['name'] = utf8_encode("中文乱码");
$str = json_encode($data); //不能将整个数组进行utf8转码
echo $str;
?>
访问端(客户端 getchinese.php):
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://域名/chinese.php');
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
$str = curl_exec($ch);
curl_close($ch);
$str = json_decode($str); //json解密
$str->name = utf8_decode($str->name); //utf8解码
echo $str->name;
?>
用浏览器打开客户端 getchinese.php ,输出结果:中文乱码
2. url加解密
服务端将字典先json编码,再url编码;客户端先url解码,再json解码
被访问端(服务器 chinese.php):
<?php
$data['id'] = 1;
//$data['name'] = urlencode("中文乱码");
// $str = json_encode($data);
$data['name'] = "中文乱码";
$str = urlencode(json_encode($data) ); //整个数组进行url编码或单个字典值编码均可
echo $str;
?>
访问端(客户端 getchinese.php):
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://211.65.193.55/chairstest/wfh/chinese.php' );
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
$str = curl_exec($ch);
curl_close($ch);
$str = json_decode(urldecode($str)); //先url解码再json解码
echo $str->name;
?>
用浏览器打开客户端 getchinese.php ,输出结果:中文乱码