函式說明
(PHP5 >= 5.2.0, PECL json >= 1.2.0)
json_encode — 對變數進行JSON編碼;
函式定義
string json_encode(mixed$value , int $options = 0 ] )
返回 value 值的JSON形式
value
待編碼的 value ,除了resource 類型之外,可以為任何數據類型
該函式只能接受UTF-8 編碼的數據(譯註:指字元/字元串類型的數據)
options
由以下常量組成的二進制掩碼: JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT, JSON_UNESCAPED_UNICODE.
返回值
編碼成功則返回一個以 JSON 形式表示的string或者在失敗時返回 FALSE。
實例說明
用json_encode()函式對數組進行JSON編碼。
<?php
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
echojson_encode($arr);
?>
以上例程會輸出:
{"a":1,"b":2,"c":3,"d":4,"e":5}
解決方法
在json_encode() 函式 使用參數:JSON_UNESCAPED_UNICODE
json_encode($arr, JSON_UNESCAPED_UNICODE);
字元轉碼方式
也可以嘗試使用這個簡短的方法:
function jsonEncodeWithCN($data) {
return preg_replace("/\\\u([0-9a-f]{4})/ie", "iconv('UCS-2BE', 'UTF-8', pack('H4', '$1'))", json_encode($data));
}
如果是php5.4以前的版本使用以下方法
間接解決
<?php
* 處理json_encode() 不支持中文的情況
*
* 實際套用中,當有中文字元時,當直接使用json_encode() 函式會使漢字不能正常顯示
* 所以有了這個適用性比較廣的函式 ch_json_encode()來解決這個問題
*
* charset: UTF-8
* create date: 2012-7-8
* @author Zhao Binyan
* @copyright (C) 2011-2012 itbdw
*//**
* 處理 json_encode() 不支持中文的情況
*
* @param array|object $data
* @return array|object
*/
function ch_json_encode($data) {
/**
* 將中文編碼
* @param array $data
* @returnstring
*/
function ch_urlencode($data) {
if (is_array($data) || is_object($data)) {
foreach ($dataas$k => $v) {
if (is_scalar($v)) {
if (is_array($data)) {
$data[$k] = urlencode($v);
} elseif (is_object($data)) {
$data->$k =urlencode($v);
}
} elseif (is_array($data)) {
$data[$k] = ch_urlencode($v);//遞歸調用該函式
} elseif (is_object($data)) {
$data->$k = ch_urlencode($v);
}
}
}
return$data;
}
$ret = ch_urlencode($data);
$ret =json_encode($ret);
return urldecode($ret);
}
注意,字元編碼必須是 utf-8 。
使用json_encode
Json 做為一種輕量級的數據交換格式,開始受到青睞,有與 XML 搶地盤的風頭。而讓人高興的是,php也把 json 序列化數據的功能內置成函式了,這讓想使用json的 PHPCoder 備感方便。
美中不足的是,json_encode / json_decode 系列函式只有在 php5.2 以上才有。這讓立志開發兼容性強的PHP系統的coder很頭痛。
幸好,已經有人把 json 的方法封裝成 php4.x 系列甚至更低的版本都可以執行的類了。這裡要先謝謝先驅了。讓我們可以踩在巨人的肩膀上走向成功。
使用方法:
if( function_exists("json_encode") )
{
return json_encode($phparr);
}
else
{
require_once ROOT."include/json.class.php";
$json = new Services_JSON;
return $json->encode($phparr);
}
?>