我正在舊的現有網站上工作。所有頁面都採用ISO-European編碼,包括MySQL數據庫。如何在不使用UTF8的情況下使用PHP json_encode?
我想用PHP的json_encode添加一些AJAX,它只支持UTF8。
有沒有解決方案使用json_encode沒有UTF8?
我正在舊的現有網站上工作。所有頁面都採用ISO-European編碼,包括MySQL數據庫。如何在不使用UTF8的情況下使用PHP json_encode?
我想用PHP的json_encode添加一些AJAX,它只支持UTF8。
有沒有解決方案使用json_encode沒有UTF8?
你需要做的唯一事情是傳遞之前,將數據轉換爲UTF-8到json_encode
。這個功能需要UTF-8的數據,除非你想重新實現json_encode
自己這是一個更容易與它的要求一起去:
function recursivelyConvertToUTF8($data, $from = 'ISO-8859-1') {
if (!is_array($data)) {
return iconv($from, 'UTF-8', $data);
}
return array_map(function ($value) use ($from) {
return recursivelyConvertToUTF8($value, $from);
}, $data);
}
echo json_encode(recursivelyConvertToUTF8($myData));
這不一定涵蓋所有可能的使用情況的完整解決方案,但它應該說明了這個想法。
您可以使用var_export
,utf8_encode
和eval
以遞歸方式將數組轉換爲UTF-8。這是一個黑客攻擊的一位,但類似以下工作:
$obj = array("key" => "\xC4rger"); // "Ärger" in Latin1
eval('$utf8_obj = ' . utf8_encode(var_export($obj, TRUE)) . ';');
print json_encode($utf8_obj);
這將打印
{"key":"\u00c4rger"}
除了'eval'之外,還有一種更好的方法可以做到......! – deceze
http://stackoverflow.com/questions/6606713/json-encode-non-utf-8-strings,這有幫助嗎? – codisfy
只是爲了澄清一點:JSON要求/僅指定爲unicode標準(其中utf-8是適合的特定編碼)。因此,聲明'使用不帶UTF8的json_encode'沒有任何意義。 – birdspider