来自https网址的json_decode来自https的JSON验证

时间:2015-02-09 17:22:00

标签: php json validation https

任何人都可以解释为什么

http://jsonlint.com/

http://jsonformatter.curiousconcept.com/

从下面的URL 1提供无效的json但不提供URL 2?它们都是相同的JSON生成代码。唯一的区别是一个是HTTP,一个是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

任何人都可以对此有所了解吗?

1 个答案:

答案 0 :(得分:1)

您的问题是HTTPS服务器正在向输出的开头添加UTF8 BOM字符,从而使预期的JSON响应无效。没有看到代码,不清楚为什么,但它可能是标题问题。

如果您无法在服务器端解决问题,您可以随时在另一端删除它。 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;
}