json_decode 来自 https url JSON 在 https 上验证
json_decode from https url JSON validation on https
谁能解释一下为什么
http://jsonlint.com/
和
http://jsonformatter.curiousconcept.com/
从下面的 URL 1 而不是 URL 2 给出无效的 json?它们都是相同的 JSON 生成代码。唯一的区别是一个是HTTPs,一个是HTTP。
https://www.discussthemarket.com/dev/
JSON.parse: unexpected character at line 1 column 1 of the JSON data
还有
http://www.lambwatch.co.uk/json.htm
Valid JSON
两者背后都有相同的 JSON 生成代码,完全相同的代码,但是当我将 URL 放入
时
http://jsonlint.com/
为了验证,https 站点返回时出现解析错误!?
另外,当我这样做时
$json = json_decode(file_get_contents("https://www.discussthemarket.com/dev/"));
$json is NULL
不过
$json = json_decode(file_get_contents("http://www.lambwatch.co.uk/json.htm"));
$json is the object as you'd expect
任何人都可以阐明这一点吗?
您的问题是 HTTPS 服务器在输出的开头添加了一个 UTF8 BOM 字符,因此使预期的 JSON 响应无效。没有看到代码,不清楚原因,但这可能是 header 问题。
如果您无法解决它 server-side,您可以随时在另一端简单地删除它。 Here is an example
<?php
$response = file_get_contents('https://www.discussthemarket.com/dev/');
$json = remove_utf8_bom($response);
var_dump(json_decode($json));
function remove_utf8_bom($text) {
$bom = pack('H*', 'EFBBBF');
$text = preg_replace("/^$bom/", '', $text);
return $text;
}
谁能解释一下为什么
http://jsonlint.com/
和
http://jsonformatter.curiousconcept.com/
从下面的 URL 1 而不是 URL 2 给出无效的 json?它们都是相同的 JSON 生成代码。唯一的区别是一个是HTTPs,一个是HTTP。
https://www.discussthemarket.com/dev/
JSON.parse: unexpected character at line 1 column 1 of the JSON data
还有
http://www.lambwatch.co.uk/json.htm
Valid JSON
两者背后都有相同的 JSON 生成代码,完全相同的代码,但是当我将 URL 放入
时http://jsonlint.com/
为了验证,https 站点返回时出现解析错误!?
另外,当我这样做时
$json = json_decode(file_get_contents("https://www.discussthemarket.com/dev/"));
$json is NULL
不过
$json = json_decode(file_get_contents("http://www.lambwatch.co.uk/json.htm"));
$json is the object as you'd expect
任何人都可以阐明这一点吗?
您的问题是 HTTPS 服务器在输出的开头添加了一个 UTF8 BOM 字符,因此使预期的 JSON 响应无效。没有看到代码,不清楚原因,但这可能是 header 问题。
如果您无法解决它 server-side,您可以随时在另一端简单地删除它。 Here is an example
<?php
$response = file_get_contents('https://www.discussthemarket.com/dev/');
$json = remove_utf8_bom($response);
var_dump(json_decode($json));
function remove_utf8_bom($text) {
$bom = pack('H*', 'EFBBBF');
$text = preg_replace("/^$bom/", '', $text);
return $text;
}