【问题标题】:file_get_contents php and json_decode error [duplicate]file_get_contents php和json_decode错误[重复]
【发布时间】:2013-06-12 17:26:27
【问题描述】:

我在 file_get_contents 和将结果解码为 json 时遇到了一个奇怪的问题。我必须告诉你,这段代码在其他服务器上是完全正常的。

我正在尝试解码这个 json: http://mediarupt.com/GET/categorized_services_for_supplier.php?suppliersID=10

进入这个页面: http://mediarupt.com/kostas.php

kostas.php 的代码是这样的:

<?php 
$servicesJSON = file_get_contents("http://mediarupt.com/GET/categorized_services_for_supplier.php?suppliersID=10");
$ForeignKeys = (object)array();
$ForeignKeys->ServicesList = json_decode($servicesJSON, true);

echo "error: " . json_last_error();

?>

<select name="servicesID" id="servicesID">
    <option id="serviceID_0" value="0" rel="0" style="font-style:italic;">Select a category...</option>
<?php foreach($ForeignKeys->ServicesList['categorized_services'] as $value){ ?>
    <option id="serviceID_<?=$value['servicesID']?>" value="<?=$value['servicesID']?>" rel="<?=$value['hasStoresList']?>"><?=$value['serviceName']?></option>   

<?php } ?>

</select>
<?php

echo '<br><br>The result of file_get_contents ($servicesJSON): '.$servicesJSON;

?>

classified_services_for_supplier.php 的代码:

<?php header('Content-Type: application/json');
    require('../settings/dbli.php');

    $table = array();
    $suppliersID = "0";

    if(isset($_GET['suppliersID']) && $_GET['suppliersID']!=NULL && $_GET['suppliersID']!='' ){  $suppliersID = $SQLConn->real_escape_string($_GET['suppliersID']); }
    $query = "SELECT DISTINCT Services.servicesID, serviceName, servicePrice, hasStoresList FROM Services, ServicesList WHERE Services.servicesID = ServicesList.servicesID AND suppliersID = '$suppliersID' AND  status = '1' AND deleted = '0'";

    $result = $SQLConn->query($query);  
     while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
        $tempArray = array();
        foreach($row as $key => $value){
            $tempArray[$key] = $value;                      
        }
        array_push($table,$tempArray);
     }
     $arr = array( "categorized_services" => $table);
    echo json_encode($arr);
?>

我收到错误 4 作为最新的 json 错误,这意味着我有 JSON_ERROR_SYNTAX。 但我用http://jsonlint.com/ 验证了 json 结果,一切似乎都正常。

另外,两个页面都是 UTF-8 且 BOM 被禁用。 您可以在此处访问 php 配置:http://mediarupt.com/phpinfo.php

希望能找到解决办法……

提前谢谢你

【问题讨论】:

  • 您已经完成了echo $servicesJSON; 的测试输出,它包含JSON 代码?
  • 是的,当然,我只是更改了代码以查看 echo $servicesJSON 的结果
  • 您说您已经使用 jsonlint.com 进行了验证,但是将您的 url 粘贴到那里并验证表明 json 无效。
  • 确实是的,但只需复制并粘贴纯字符串(分类的_services_for_supplier.php的结果)...您会看到那里没有错误..
  • 复制粘贴字符串显然会删除导致字符串在响应中无效的任何字符,响应仍然无效。

标签: php utf-8 file-get-contents json


【解决方案1】:

尝试在http://jsonlint.com/ 中给出JSON URL,然后复制响应并将其粘贴到禁用BOM 的文件中,您会注意到在开始{ 括号之前的开头有一个奇怪的小行这是导致问题的原因

【讨论】:

  • 您需要找出为什么会出现那条奇怪的小线,并且需要将其删除。希望有帮助
  • 我注意到确实,我在我的问题正文中复制了页面的代码......我将尝试在新页面中从头开始重写脚本
【解决方案2】:

json 根本无效。

在第一个大括号前面有以下内容(十六进制编码)ef bb bf ef bb bf

是utf8 bom。

有一个与处理有关的问题,所以我不会在这里讨论它。在这里阅读:

How to remove %EF%BB%BF in a PHP string

这里还有一个专门处理 json 的:

Convert UTF-8 with BOM to UTF-8 with no BOM in Python

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 2014-03-30
    相关资源
    最近更新 更多