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对象的数组就是二维数组

posted on 2017-04-26 10:23  dreamstar  阅读(273)  评论(0编辑  收藏  举报