2010-08-04 91 views
3

所有,Json_encode,json_decode和UTF8

我做一個JSON請求到Web服務器,使用PHP,並將其返回我在一個變量的JSON響應。 JSON響應將包含許多鍵和值。我從服務器獲得的JSON響應中有特殊字符。因此,我使用以下語句將其轉換爲UTF8,解碼JSON並將其用作數組以顯示給UI。

$response = json_decode(utf8_encode($jsonresponse)); 

現在,我必須在JSON請求中將相同的值傳遞給服務器以完成某些操作。但是,當我通過

$jsonrequest = json_encode(utf8_encode($request)); 

到服務器,它失敗。

以下代碼成功讀取特殊字符並將其顯示到UI。但如果我必須將utf8_encode值傳遞給服務器,則會失敗。

目前整個往返代碼是根據:

$requestdata = json_encode($request); 
$jsonresponse = //Do something to get from server; 
$response = json_decode(utf8_encode($jsonresponse)); 

如何修改它,這樣我通過精確值,以什麼我從服務器的JSON響應receieved?

+0

最近我有這個問題,原來我用成爲一個狗屎編碼器,並在幾年前在一段代碼中使用require_once作爲一個愚蠢的理由。良好的3小時調試。 :) – Jek 2017-10-08 12:25:39

+0

@Jek require_once與編碼有什麼關係? – Borna 2017-11-14 14:26:06

+0

@博爾納我不知道爲什麼,但它解決了我的問題。我花了數小時縮小了我的代碼庫中編碼問題在JSON之前打印出來的位置,並縮小到在類的公共函數中調用require_once。蠢事。 – Jek 2017-11-14 20:06:54

回答

1

你試過切換功能的地方嗎?

​​

函數utf8_encode唯一編碼字符串不是數組

+0

仍然無法正常工作......但至少php錯誤消失 – Jake 2010-08-04 18:45:51

+0

json_encode僅適用於utf-8字符串,因此如果$ request中有非utf-8字符串,則會失敗。 (如果沒有,將它包裝在utf8_encode中是毫無意義的。) – 2014-07-01 09:41:26

0

我也同時使用ZF和UTF-8編碼字符串在AJAX調用和我認爲uft8_encode和utf8_decode功能應該是過時的。

你有一個有效的meta標籤

<元HTTP的當量= 「Content-Type的」 內容= 「text/html的;字符集= UTF-8」/ >

和有效的doctype

< DOCTYPE HTML PUBLIC 「 - // W3C // DTD HTML 4.01 // EN」 「http://www.w3.org/TR/html4/strict.dtd」 >

1

您將初始請求轉換爲UTF-8,因此我認爲它是其他內容。但是當您發回數據時,您不會將其轉換回原始編碼。

你確定發送服務器預期的編碼數據嗎?

6

我從服務器得到的JSON響應中有特殊字符。因此,我使用以下語句將其轉換爲UTF8,解碼JSON並將其用作數組以顯示給UI。

JSON數據已經以UTF-8編碼。您不應該再次將其轉換爲UTF-8;你會破壞數據。

取而代之的是:

$response = json_decode(utf8_encode($jsonresponse)); 

你應該有這樣的:

$response = json_decode($jsonresponse); //already UTF-8! 
+0

+1,另外,utf8_decode和utf8_encode應該使用_never_,因爲在實踐中,你從不處理ISO-8859-1編碼,即使你需要在UTF-8和UTF-8之間進行轉換,您可以改用iconv或mb_convert_encoding。人們好奇如何在PHP中正確地做unicode應該看看這些幻燈片:http://www.slideshare.net/auroraeosrose/using-unicode-with-php-30427880 – 2014-01-29 09:44:20

+0

(Windows記事本問題)請諮詢此,我分享這個問題也解決了它:http://stackoverflow.com/questions/10290849/how-to-remove-multiple-utf-8-bom-sequences-before-doctype – 2014-09-19 14:55:54

3

設置該到PHP連接:

$sql = 「SET NAMES ‘utf8′」; 
mysql_query($sql, $link);