2016-02-20 124 views
0

我正在舊的現有網站上工作。所有頁面都採用ISO-European編碼,包括MySQL數據庫。如何在不使用UTF8的情況下使用PHP json_encode?

我想用PHP的json_encode添加一些AJAX,它只支持UTF8。

有沒有解決方案使用json_encode沒有UTF8?

+0

http://stackoverflow.com/questions/6606713/json-encode-non-utf-8-strings,這有幫助嗎? – codisfy

+0

只是爲了澄清一點:JSON要求/僅指定爲unicode標準(其中utf-8是適合的特定編碼)。因此,聲明'使用不帶UTF8的json_encode'沒有任何意義。 – birdspider

回答

1

你需要做的唯一事情是傳遞之前,將數據轉換爲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)); 

這不一定涵蓋所有可能的使用情況的完整解決方案,但它應該說明了這個想法。

0

您可以使用var_export,utf8_encodeeval以遞歸方式將數組轉換爲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"} 
+0

除了'eval'之外,還有一種更好的方法可以做到......! – deceze

相關問題