PHP json url 编码
参考http://www.cnblogs.com/ninemilli/archive/2011/09/13/2174560.html
这四个函数都是php的函数
json_encode()
对变量进行json编码:把对象转为json字符串
执行成功返回 JSON 数据,否则返回 FALSE
json_decode()
对json格式的字符串进行解码,把json格式字符串转为php变量
urlencode()函数:
把字符串进行url编码
语法:string urlencode(string str) 它的参数和返回值都是字符串
urldecode()函数
把字符串进行url解码
当使用json_encode()函数对php对象进行编码时,如果对象的某些字段(属性)是中文,就会有问题。
所以采取的办法:先把对象的字段进行url编码,再把对象进行json编码,再把对象进行url解码。
第一步:把对象的字段进行url编码,对象的字段还是个字符串,只不过是内容改变了(由中文变成了url编码)
第二步:把对象进行json编码,对象就成了json字符串格式。
第三步:因为对象已经是json字符串格式,所以可以对json字符串进行url解码(把url编码变成中文)
总得来说json编码是改变对象的格式:对象和字符串;url编码是改变同一内容的不同表现方式
public function searchMaterial($keyname,$username){
$materialSer = D("Material","Service");
/*materials是一个二维数组,它的一个元素是一个php对象:物资类
物资类的title,attention,keywords等三个字段可能含有中文*/
$materials = $materialSer->appMatSearch($keyname);
/*循环输出每一个json编码后的对象*/
foreach($materials as $key=>$val){
//1.将中文字段url编码
$val['title'] = urlencode($val['title']);
$val['attention'] = urlencode($val['attention']);
$val['keywords'] = urlencode($val['keywords']);
//2.将对象json编码:$json_val是字符串格式,中文字段是url编码显示
$json_val = json_encode($val);
//3.将json编码后的对象(json串)url解码:$json_material是字符串格式,中文字段是中文显示
$json_material = urldecode($json_val);
echo($json_material);
}
/**如果物资对象的字段都没有中文内容,可以直接用下面方法把二维数组转为json串*/
// echo(json_encode($materials));
}
因为一个php对象相当于一个一位数组,所以存放php对象的数组就是二维数组