0

我对 php 开发相对较新,但对一般的 Web 开发并不陌生。

我有以下 php 文件:

<?php
class dialogResult{

    var $Message;
    var $Title;
    var $Height;
    var $GenericData;

     function __construct(){
        $this->Height = 10;
    }
}

   header("Cache-Control: no-cache", true);
   header("Content-type: application/json; charset=utf-8", true);
   $dr = new dialogResult();
   $dr->Message = "A Test Message encoded";
   $dr->Height = 10;
   $dr->GenericData = "Empty";
   $dr->Title = "My Message";
   echo(json_encode($dr));
?>

这会按预期返回 JSON 数据,但是如果我将类移动到单独的文件并添加 include、include_once、require 或 require_once,则会返回无效的 JSON 数据。谁能告诉我为什么会这样?

它不必只是移动这个类,如果我有任何包含的文件,它会使数据无效。

谢谢,

基思

这是包含类,我也尝试过删除?>

<?php

class dialogResult{

    var $Message;
    var $Title;
    var $Height;
    var $GenericData;

     function __construct(){
        $this->Height = 10;
    }
}

任何地方都没有前导或尾随空格。这是返回的“无效”JSON:

{"Message":"A Test Message encoded","Title":"My Message","Height":10,"GenericData":"Empty"}

如果我尝试使用 JSONLint 解析它,这会给我一个“意外令牌”。当然,如果我手动将它输入到 JSONLint 那就没问题了。我想有一些我无法识别/看到出现在 JSON 中的字符,但不知道如何找到它。

4

3 回答 3

4

即使 Martin 和 navnav 注释也是正确的,但空格通常不会像二进制格式(例如 GIF、JPEG 等)那样使 Json 格式无效。

因此,您的问题可能是BOM 标头,一个 2/3 字节的标头,许多编辑器没有显示,或者更糟糕的是,在文件开头添加。

编辑

删除 BOM 的一种可能方法是使用phpstorm 之类的 IDE ,它具有二进制安全编辑器,能够检测和删除 BOM。

于 2012-06-29T12:20:00.303 回答
2

可能是您在包含的文件中的屏幕上回显/打印某些内容。

JSON 不适用于其他内容。

还有您的?>标签 - 该标签后是否有任何换行符/空格?如果是这样,那就是你的问题。删除它们。事实上,如果该文件只包含 PHP 代码,请?>完全删除该标签,因为它不需要。

于 2012-06-29T12:11:48.147 回答
0

如果在 [?php 和 ?] 之前有任何空白字符,请检查您的班级。这会触发提供给浏览器的内容,并会创建一个 HTTP Header cannot be created 警告,这会给出错误的 JSON。

检查你的脚本——你要包括这个的那个——也。

对于许多 Web 开发人员来说,不使用 ?> 已成为某种“最佳实践”,正是出于这个原因。

无效数据的外观如何?

于 2012-06-29T12:12:25.837 回答