2011-10-03 56 views
3

我用PHP檢索json信息時出現了一些問題。用php檢索json時出錯

我創建了一個簡單的PHP頁面,返回一個JSON:

$data = array(
    'title' => 'Simple title' 
); 
print json_encode($data); 

而在另一頁我試圖讓該數組作爲一個對象:

$content = file_get_contents($url); 
$json_output = json_decode($content, true); 

switch(json_last_error()) 
{ 
    case JSON_ERROR_DEPTH: 
     echo ' - Maximum stack depth exceeded'; 
     break; 
    case JSON_ERROR_CTRL_CHAR: 
     echo ' - Unexpected control character found'; 
     break; 
    case JSON_ERROR_SYNTAX: 
     echo ' - Syntax error, malformed JSON'; 
     break; 
    case JSON_ERROR_NONE: 
     echo ' - No errors'; 
     break; 
} 

的問題是,有這種方法是錯誤的:我收到一個「JSON_ERROR_SYNTAX」,因爲在「file_get_contents」函數之後,我在字符串的開頭有一個未知字符。

如果我複製/粘貼在記事本+ +,我沒有看到:

{"title":"Simple title"} 

但我看到:

?{"title":"Simple title"} 

有人能幫助我嗎?

+0

稍微更新一下:如果我在返回的字符串中使用php函數「utf8_encode」,那麼在字符串的開頭就有這個「****」......我不知道爲什麼.. 。 –

+0

這是UTF-8 BOM(http://en.wikipedia.org/wiki/Byte_order_mark),你應該刪除它;) – ComFreek

回答

3

請確保您的腳本具有相同的編碼 - 如果是UTF,請確保它們在文件開始時沒有字節順序標記(BOM)。

+0

謝謝!我用Notepad ++轉換了我的php文件,所有的作品! 我第一次聽說它。 –

1

什麼

$content = trim(file_get_contents($url)); 

此外,它聽起來好像在PHP中的編碼有問題,echo是您的JSON。嘗試設置正確(如:content-type)標題並確保這兩個文件都是UTF-8編碼的。


另請參見:如果在瀏覽器中打開$url,會發生什麼情況?你看到一個「?」

+0

感謝你的回答,但問題依然存在... 1)我試過用「修剪」功能 - 沒有結果 2)我添加了「header('Content-Type:text/html; charset = UTF-8');」 - 沒有結果 3)我檢查我的文件:它們都是UTF-8 –

+0

我也在瀏覽器中打開了我的網址,但是沒有任何「?」。 –

0

通過你的PHP瀏覽一個流浪的「?」。

+0

沒有任何「?」在我的PHP代碼中,這是我第一次嘗試:) –

1

我很確定你的頁面沒有json_encode有一個流浪?。在?>等方面尋找缺失的>

+0

我檢查了它,但我沒有像「?>」這樣的終結符:每個php文件都以「<?php」開頭,沒有任何結尾字符串來避免這種類型的錯誤。 –