使用file_get_contents从url获取JSON

时间:2016-11-24 11:20:55

标签: php json file-get-contents

我有一台服务器以JSON提供一些数据。 我试图通常使用这些数据:

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

但是$ result还是一个字符串。 问题是来自file_get_content的数据在数据之前有一些字母数字字符串,之后是零。

类似的东西:

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

我已经直接从网址检查了json的有效性,并且格式正确,我无法理解零和215ba的来源。

显然我可以删除两个字符串,但我想知道是否有更具体的解决方案而不是解决方法

PS:遗憾的是我无法使用cURL

3 个答案:

答案 0 :(得分:3)

关于json_decode的文档的说明: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);

答案 1 :(得分:1)

可能是JSON包含UTF8字符,所以在文件开头使用BOM标记,而你的json_decode函数是在没有启用多字节字符串的PHP中运行的吗?

答案 2 :(得分:-1)

你遇到的问题我非常普遍,理想情况是当json数据不正确时会发生这种情况,例如字符串中包含不受支持的字符集或某些损坏的字符串。因此,只需尝试使用UTF-8支持对文件内容进行解码,以便更安全,并且可以通过在php中使用utf8_encode()函数或使用curl处理获得的utf-8内容来解决问题。通过档案。