我正在尝试通过Google财经访问股票行情
通过这样做:
$quote = file_get_contents('http://finance.google.com/finance/info?client=ig&q=VSE:APG1L');
$json = str_replace("\n", "", $quote);
$data = substr($json, 4, strlen($json) -5);
print_r($data);
$json_output = json_decode($data, true);
print_r($json_output);
echo "\n".$json_output['l'];
json_decode
假设给我一个包含键和值的普通数组,但它没有。
答案 0 :(得分:2)
如果您在尝试json_last_error()
后查看json_decode()
,则会看到您正在获取:
JSON_ERROR_UTF8 Malformed UTF-8 characters, possibly incorrectly encoded
试试这个:
$quote = file_get_contents('http://finance.google.com/finance/info?client=ig&q=VSE:APG1L');
$json = substr($quote, 4, -5);
$json_output = json_decode($json, true, JSON_UNESCAPED_UNICODE);
print_r($json_output);
请注意,JSON_UNESCAPED_UNICODE
仅适用于php 5.4
另一种选择是......
$quote = utf8_decode($quote);
...你拿到它之后。这会将欧元符号转换为?
字符。可能不是你想要的,但至少你得到json_decode给你返回一个数组。
更新:有关详细信息,请参阅此处:
答案 1 :(得分:0)
另一种解决方案是“手动”将€
的所有实例替换为\u20AC
(这是欧元符号的unicode字符点)。
$quote = file_get_contents('http://finance.google.com/finance/info?client=ig&q=VSE:APG1L');
$quote = str_replace(chr(128), '\u20AC', $quote);
$json = substr($quote, 6, -3); // remove unnecessary '// [ … ]'
$json_output = json_decode($json, true);
print_r($json_output);