2011-06-28 66 views
6

我使用WordPress和JSON API插件(http://wordpress.org/extend/plugins/json-api/)來生成對我們其他網站的響應。使用json_encode的奇怪JSON編碼

我已經打了一個很奇怪的問題(我們使用PHP 5.3.6),當我通過以下陣列http://pastebin.com/xdfYjrvK到json_encode()它給了我這個(JSON的內容類型):http://pastebin.com/T61XGPP5

所以最開始的廢話,在上面的例子中它是2609和0到底,它根據響應的大小而變化,更多的內容 - >更高的十六進制數。它也僅在響應數量「足夠高」時出現,所以它在小響應時起作用。首先我認爲它是插件,但它在本地工作(在兩臺不同的Mac OS X機器上),我們已經將VPS(Debian,Apache,Nginx,PHP)上的所有軟件包更新到最新版本。

$charset = get_option('blog_charset'); 
if (!headers_sent()) { 
    header('HTTP/1.1 200 OK', true); 
    header("Content-Type: application/json; charset=$charset", true); 
} 

echo $result; 

$字符集設置爲UTF-8:

發送內容類型時,用純文本,而不是應用程序/ JSON輸出$結果不是當它纔會顯示。

Google chrome控制檯顯示:「資源解釋爲Document,但是使用MIME類型application/json傳輸。」

那麼,有沒有人有線索最新發生在這裏?

+0

$ result初始化在哪裏?它是一個json_encode-d值嗎? 。 –

+0

是的,它來自另一個函數,它與內置在json_encoding照顧 –

回答

4

這看起來像塊編碼(http://en.wikipedia.org/wiki/Chunked_transfer_encoding)。請務必檢查您的標題是否在響應中正確設置了Content-Length,以確保您不會強制Web服務器使用CTE。

+0

我的頭是: HTTP/1.1 200 OK 服務器:nginx/0.6.32 日期: Wed,29 Jun 2011 06:25:53 GMT Content-Type:application/json; charset = UTF-8 傳輸編碼:分塊 連接:保持活動 X-Powered-By:PHP/5.2.6-1 + lenny10 設置內容長度就像一個魅力工作,謝謝! –

+0

也有同樣的問題,用nginx也是。非常感謝,這爲我節省了很多麻煩 – skiplecariboo

0

一個要求JSON有是你給它所有數據必須是UTF-8編碼。 json_encode()不會自動執行此操作。所以你可以在json_encode之前嘗試運行這個array_map("utf8_encode", $array);

否則......它看起來怪異,所以我只是猜測......

+0

所有數據已經​​是UTF-8編碼 –