2016-11-24 77 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内容。