11月
4
2006
分類:
最近更新:
2006-11-04
JSON in PHP - PHP 5.2 正式納入 JSON extension
自 PHP 5.2 起,正式納入 JSON extension 。函數名稱跟 php-json 一樣是 json_decode()/json_encode() 。稍微要注意 json_decode() 多加了一個選擇性的參數。 PHP 官方的 json_decode() 對於 Object of JSON 的回傳型態是個體 (object) 而不是陣列 (associative array) ,但可以指定第二個參數為 true 以回傳陣列。這個差異是基於 JavaScript 和 PHP 的語法不同。對 JavaScript 而言, obj.member 和 obj['member'] 是等義的,兩者都是個體成員存取操作。對 PHP 而言, $obj->member 和 $obj['member'] 卻是不等義的,前者是個體成員存取操作,後者則是陣列索引子操作。
再次提醒, JSON 規範的字元編碼為 UTF-8 ,如果 PHP script 檔案的儲存編碼格式不是 UTF-8 (事實上, PHP 官方建議以 ISO-8859-1 編碼儲存) ,那麼調用 json_encode() 時,須先轉換編碼。 PHP 官方範例是用 utf8_encode() ,這只適用歐洲語系,對東亞語系而言是錯的! utf8_encode($s) 的結果等於 iconv('iso-8859-1', 'utf-8', $s) 。如果將一個中文字串視為 ISO-8859-1 字元集的內容編碼,那麼結果將是一個不可讀的字串。
$s = '這是一個中文字串'; // save file as Big5 encoding. $json1 = json_encode(array('name' => utf8_encode($s))); $json2 = json_encode(array('name' => iconv('big5', 'utf-8', $s))); echo '<script type="text/ecmascript">'; echo "var json1 = {$json1};\n"; echo "var josn2 = {$json2};\n"; echo 'window.alert(json1.name);';//un-readable echo 'window.alert(json2.name);'; echo '</script>';
樂多舊網址: http://blog.roodo.com/rocksaying/archives/2418349.html
樂多舊回應