json_encode

json_encode

實際套用中,當有中文字元時,當直接使用json_encode() 函式會使漢字編碼成”\u***”的形式,自從php5.4起 已經解決這個問題,使用以下方法解決漢字被編碼的問題,json_encode("中文", JSON_UNESCAPED_UNICODE)

函式說明

(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);
}
?>

相關詞條

相關搜尋

熱門詞條

聯絡我們