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;
}