2016-04-15 160 views
2

我有波斯文字"سرما"PHP的json_encode轉換UTF8字符串的字符代碼

,然後當我將它轉換JSON使用json_encode()來,我得到了一系列的轉義字符代碼,如\u0633這似乎可以預料和一個合理的過程。但我的困惑在於我不知道如何將它們轉換回可讀的字符串。我應該怎麼做在PHP中?

我應該使用任何mb_ *家族嗎?我也檢查了json_encode()參數,發現沒有適合我的東西。

UPDATE 我得到保存在我的數據庫是: [ 「u0633u0631u0645u0627」]

這說明字符不正確地轉義。而如果我將其更改爲 ["\u0633\u0631\u0645\u0627"]它變得易於通過json_decode()

+1

不'json_decode'你想要什麼? – Barmar

+0

不,它只是讓它們回到原樣。我的意思是\ u * notation ... –

+0

它適合我。我找回帶有波斯字符的原始字符串。 – Barmar

回答

2

它們應該在解碼時轉換回另一端。這是最安全的選擇,因爲它可能無法保證傳輸或存儲不會破壞多字節編碼。

如果你確信一切是UTF8終端到終端,你可以做安全:

$res = json_encode($foo, \JSON_UNESCAPED_UNICODE); 

http://php.net/manual/en/function.json-encode.php

+0

不,它不能解決問題。 –

+0

解決了問題。您的解決方案奏效 –

+0

存儲在數據庫中時,仍然需要修復您的轉義問題。如果它不是逃避反斜槓,它不是逃避其他特殊字符,所以你可以打開SQL注入。 – Barmar

0

也許嘗試編碼中的Unicode字符,然後json_encoding它,然後在另一方(接收JSON)解碼json,然後解碼unicode。

例子:

//Encode 
json_encode(utf8_encode($string)); 

//Decode 
utf8_decode(json_decode($string));