Google Code Prettify - 輕量級的語法上色工具

星期二, 9月 01, 2015

PHP 的 json_encode, urlencode 和urldecode 方法

PHP內建的  json_decode
自己的範例-------------------------------------------------------------
$response = array();
$response = array();
$response["success"] = 1;
$response["products"] = array();
$product = array("國家"=>"台灣","首都"=>"台北");
array_push($response["products"], $product); // product 放入 products array
$product = array("國家"=>"日本","首都"=>"東京");
array_push($response["products"], $product); // product 放入 products array
$product = array("國家"=>"中國","首都"=>"北京");
array_push($response["products"], $product); // product 放入 products array

$encode = json_encode( $response ); //傳回 array包物件
//$encode = json_encode( $response ,JSON_FORCE_OBJECT ); //傳回 物件包物件

$decode = json_decode( $encode );  //json_decode
if (!empty($decode)){
    foreach ($decode->products as $blog) {
  echo $blog->首都;
 }
}
echo "
"; var_dump( $decode->success ); echo "
"; var_dump( $decode->products[0] ); //echo "
"; var_dump( ( (array)$decode->products ) ); //物件轉型成 array echo "
"; var_dump( $decode->products );
------------------------------------------------------------------
PHP 底層已經做了unicode 處理。

$arr = array ('a'=>'北京');
echo json_encode($arr);
以上代碼執行後輸出:

{“a”:”\u5317\u4eac”}

如果嫌它不夠直觀,可以利用urlencode 和urldecode 方法繞過這個轉碼為unicode 的過程:

$arr = array ('a'=>urlencode('北京'));
echo urldecode(json_encode($arr));
以上代碼執行後輸出:{“a”:”北京”}

但是对于抓取来的 json 我们没办法修改别人的服务器,有这么一个方法可处理;
$code = json_encode($str);
$code = preg_replace("#\\\u([0-9a-f]+)#ie", "iconv('UCS-2', 'UTF-8', pack('H4', '\\1'))", $code);
print_r( mb_convert_encoding(stripslashes($code), "GBK", "UTF-8") );
另:在 php cli 模式下不能输出 utf-8 编码的字符,原因是 cmd 下只能显示 936 编码
处理办法是,把utf-8 编码的内容用 mb_convert_encoding 函数转化一下:如下
mb_convert_encoding("utf-8 的内容", "GBK", "UTF-8");
http://ju.outofmemory.cn/entry/11407



200909062235PHP json_decode 無法解碼 可試試 PEAR Services_JSON

PHP 的 json_decode 函式不知道是因為有 bug ,還是考量太少,常常發生解碼不出來的情況。用 json_last_error() 也只得到一個錯誤代碼,沒說到底是哪裡錯了。如果你碰到這個情況,可以來試試 PEAR 的 Services_JSON 。
PEAR 有自己的安裝方式,要先安裝基本套件等等。但如果你只是想拿 Services_JSON 來用,那完全不用管他的安裝方式。把 Services_JSON 下載下來,解壓縮,裡面的 JSON.php 放到你想放的地方。然後︰
  include 'JSON.php';
    
  $json = new Services_JSON();
  $data = $json->decode($str);
就可以用了!
如果你想要和PHP內建的  json_decode 的第二個參數一樣,讓 decode 的回傳值是 arrays ,那請像下面這樣, new Services_JSON 的時候多帶個 SERVICES_JSON_LOOSE_TYPE
  include 'JSON.php';
    
  $json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
  $data = $json->decode($str);