\u4e2d\u6587)<?php
function _encode($arr) {
$na = array();
foreach ($arr as $k => $value) {
$na[_urlencode($k)] = _urlencode($value);
}
// json_encode 後解碼,並處理換行符
return addcslashes(urldecode(json_encode($na)), "\r\n");
}
function _urlencode($elem) {
if (is_array($elem)) {
foreach ($elem as $k => $v) {
$na[_urlencode($k)] = _urlencode($v);
}
return $na;
}
return urlencode($elem);
}
?>
<?php
$data = array(
'姓名' => '王小明',
'備註' => "第一行\n第二行",
'子資料' => array(
'城市' => '台北',
'年齡' => 25
)
);
echo _encode($data);
// 輸出正常中文 JSON,換行符已處理
?>
urlencode(),將中文、換行等特殊字元轉為安全的 ASCII 字串json_encode() 產生標準 JSON(此時全為 ASCII,無亂碼)urldecode() 還原中文字元addcslashes() 處理換行符 \r\n 防止 JSON 解析錯誤<?php
// JSON_UNESCAPED_UNICODE:不轉義 Unicode(直接輸出中文)
// JSON_UNESCAPED_SLASHES:不轉義斜線
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
?>
建議:PHP 5.4 以上環境優先使用內建常數;舊版環境使用上述包裝函數。