2016-11-24 111 views
1

我有一臺服務器以JSON的形式提供一些數據。 我試圖讓這些數據與通常的:使用file_get_contents從url獲取JSON

$res = file_get_contents($url); 
$result = json_decode($res); 
var_dump($result); 

但是$結果又是一個字符串。 問題是來自file_get_content的數據在數據之前有一些字母數字字符串,之後是零。

類似:

215ba 
{"@attributes":{"ticker":"FCA"},"info...... // here all json data 
0 

我已經從URL檢查JSON有效性直接和格式正確,我不明白是從哪裏來的零和215ba。

很顯然,我可以剝離字符串除去這兩種,但我不知道是否有一個更具體的解決方案,而不是一個解決辦法

PS:很遺憾,我不能使用捲曲

+0

什麼是編碼類型? –

+0

$ url是我們提供動態數據的服務器之一的url,但我已經通過JSON驗證器檢查了服務器的輸出,並且格式正確且格式正確。從瀏覽器和的file_get_contents的一個結果之間的唯一區別是在開始和結束時 – Plastic

+0

編碼類型的字母數字值零爲UTF-8 – Plastic

回答

2

注:http://php.net/manual/en/function.json-decode.php

This function only works with UTF-8 encoded strings.

像這樣的東西可能會解決它:

$contents = file_get_contents($url); 
$contents = utf8_encode($contents); 
$results = json_decode($contents); 

如果不工作,你可以使用正則表達式來檢查新線。假設json將始終在1行上。

<?php 
$contents = file_get_contents($url); 
$contents = utf8_encode($contents); 
preg_match('/^.+[\n](.+)[\n]./', $contents, $matches); 

//the json is in $matches[1] 
print_r($matches); 
+0

不工作,我的JSON已經是UTF-8編碼 – Plastic

+0

它是否改變了輸出? –

+0

utf8_encode($ contents)後沒有變化; – Plastic

1

會不會是JSON中包含了UTF8字符,因此在文件的開頭使用了BOM標記,並且您的json_decode函數正在PHP中運行,但沒有啓用多字節字符串?對文檔進行json_decode

+0

看來情況下,你知道刪除它的有效途徑? – Plastic

-1

你一直面臨我非常普遍的問題是,當作爲包含在字符串或者一些斷了線的不支持的字符集的JSON數據不簡潔(wellformed)這樣的理想發生這種情況。因此,只需嘗試使用UTF-8支持對文件內容進行解碼,以使其更安全並且不太複雜,您可以在php中使用utf8_encode()函數或使用curl處理通過文件獲取的utf-8內容。