【前言】
json是一種輕量級的數據交換格式,在現在的web開發當中,簡介和清晰的層次結構使得json成為理想的數據交換語言。
在php當中,就經常需要使用json_encode這個函數來對變量進行JSON編碼,而在編碼完成之後,需要對一些特殊字符進行相應的處理(例如/,’,”等),也會在編碼中文字符的時候遇到一些問題。這篇博客就對json_encode()做一個比較詳細的說明。
【json_encode簡介】
json_encode — 對變量進行 JSON 編碼
string json_encode ( mixed $value [, int $options = 0 [, int $depth = 512 ]] )
[value]:待編碼的 value ,除了resource類型之外,可以為任何數據類型。所有字符串數據的編碼必須是 UTF-8。
[options]: 由以下常量組成的二進制掩碼: JSON_HEX_QUOT等。
具體參見:JSON常量
[depth]: 設置最大深度。 必須大於0。
成功則返回 JSON 編碼的 string 或者在失敗時返回 FALSE
【json_encode詳解】
1、特殊字符(, ‘, “, &)的處理
$a = array('
/*Normal*/
echo json_encode($a)."
";
/*JSON_HEX_TAG:將所有的< 和 > 轉換成\\u003C和\\u003E*/
echo json_encode($a[0], JSON_HEX_TAG)."
";
/*JSON_HEX_APOS:將所有的'轉換成\\u0027*/
echo json_encode($a[1], JSON_HEX_APOS)."
";
/*JSON_HEX_QUOT:將所有的"轉換成\\u0022*/
echo json_encode($a[2], JSON_HEX_QUOT)."
";
/*JSON_HEX_AMP:將所有的&轉換成\\u0026*/
echo json_encode($a[3], JSON_HEX_AMP)."
";
?>
輸出:
["","'bar'",""baz"","&blong&"]
"\\u003Cfoo\\u003E"
"\\u0027bar\\u0027"
"\\u0022baz\\u0022"
"\\u0026blong\\u0026"
2、使一個非關聯數組輸出一個類而非數組
/*JSON_FORCE_OBJECT:使一個非關聯數組輸出一個類而非數組*/
$b = array();
echo json_encode($b)."
";
echo json_encode($b, JSON_FORCE_OBJECT)."
";
$c = array(array(1,2,3));
echo json_encode($c)."
";
echo json_encode($c, JSON_FORCE_OBJECT)."
";
$d = array('foo' => 'bar', 'baz' => 'long');
echo json_encode($d)."
";
echo json_encode($d, JSON_FORCE_OBJECT)."
";
?>
輸出:
[[1,2,3]]
{"0":{"0":1,"1":2,"2":3}}
{"foo":"bar","baz":"long"}
{"foo":"bar","baz":"long"}
3、將數字字符串編碼成數字
/*JOSN_NUMERIC_CHECK:將所有的數字字符串編碼成數字*/
$e = array('12345', '789');
echo json_encode($e)."
";
echo json_encode($e, JSON_NUMERIC_CHECK);
?>
輸出:
["12345","789"]
[12345,789]
4、特殊字符’/’的處理(不要編碼’/’)
/*JSON_UNESCAPED_SLASHES:不要編碼/*/
$f = array('/abcd');
echo json_encode($f)."
";
echo json_encode($f, JSON_UNESCAPED_SLASHES)."
";
?>
輸出:
["\/abcd"]
["/abcd"]
5、確保浮點數被編碼為浮點數
/*JSON_PRESERVE_ZERO_FRACTION:確保浮點數被編碼為浮點數*/
echo json_encode(12.0)."
";
echo json_encode(12.0, JSON_PRESERVE_ZERO_FRACTION)."
";
?>
輸出:
12
12.0
6、中文字符編碼(以字面編碼多字節Unicode字符)
$g = array('你好!', '世界');
/*JSON_UNESCAPED_UNICODE:以字面編碼多字節Unicode字符(默認是編程成\\uXXXX)*/
echo json_encode($g)."
";
echo json_encode($g, JSON_UNESCAPED_UNICODE)."
";
?>
輸出:
["\\u4f60\\u597d\\uff01","\\u4e16\\u754c"]
["你好!","世界"]
閱讀更多 未來的語言 的文章