【问题标题】:Invalid PHP JSON encoding无效的 PHP JSON 编码
【发布时间】:2010-12-19 21:52:55
【问题描述】:

我正在使用 PHP (5.3.1) 开发一个项目,我需要将 JSON 字符串发送到 Web 服务(在 python 中),但我从 json_encode 获得的结果没有作为有效的 JSON 传递(i' m 使用 JSLint 检查有效性)。

我应该补充一点,我尝试编码的结构相当大(13K 编码),并且部分包含 UTF8 数据,虽然 json_encode 确实处理了它,但我在结果中奇怪的地方得到了空格。例如,我可以得到 {"hello":true} 或 {"hell o":true} ,这会导致来自 web 服务的错​​误,因为 JSON 无效(或数据,如第二个示例)。

我也尝试使用 Zend 框架进行 JSON 编码,但这并没有太大的不同。

PHP 中的 JSON 是否存在已知问题?有没有人遇到过这种行为并找到了解决方案?

【问题讨论】:

    标签: php json utf-8 encode


    【解决方案1】:

    为了确保对象键不能包含空格或任何非 unicode 字符,未加引号的变量只能是布尔值、整数、浮点数、对象和数组值,字符串应始终加引号。

    另外,我建议您在 json 输出之前添加正确的标头。

    if(!headers_sent())
       header('Content-Type: application/json; charset=utf-8', true,200);
    

    您还可以将您传递给json_encode的数组或对象发布吗?

    【讨论】:

      【解决方案2】:

      前几天我在处理一些自动生成的电子邮件,并注意到同样的奇怪行为(在电子邮件正文中插入了空格),所以我开始检查电子邮件帖子并找到了罪魁祸首:

      来自 SMTP RFC2821:

      文本的最大总长度 包括 1000 的行 字符(不包括前导 点复制以提高透明度)。

      我的电子邮件正文确实在一行中,所以用 \n 打破它修复了空格问题。

      【讨论】:

        【解决方案3】:

        在摸索了将近一天之后,我得出的结论是问题不在 json_encode 函数中。这是我的帖子功能。

        基本上,json_encode 正在准备要发送到另一个服务的数据。在今天之前,我使用 stream_context_create 和 fopen 将数据发布到外部服务,但现在我使用 fsockopen 和 fputs,它似乎可以工作。

        虽然我不确定问题的性质,但我很高兴它现在可以工作了 :)

        顺便说一句:在此过程之后,我将输入和输出(均以 JSON 格式)邮寄给自己,这就是我最初看到问题的方式。这个问题仍然存在,但我猜这与邮件的编码或类似的东西有关。

        【讨论】:

          【解决方案4】:

          您说“我尝试编码的结构......部分由 UTF8 数据组成。”这意味着它也是部分非 UTF8 数据。 json_encode doc 底部有一条评论,即

          json_encode() 期望字符串编码为 UTF8 格式,而 PHP 字符串默认为 ISO-8859-1 编码。 这意味着

          json_encode(array('àü'));

          将生成一个空字符串的 json 表示,而

          json_encode(array(utf8_encode('àü')));

          会起作用的。

          JSON 的失败段是否是由于非 UTF8 输入?

          【讨论】:

          • 实际上,我确实尝试在 json 编码之前对我的所有内容进行 utf8 编码,但这也不起作用
          • 失败与 UTF-8 没有直接关系。我可以得到一个带有空格的布尔值或类似的东西(真而不是真)
          猜你喜欢
          • 2019-07-24
          • 2023-03-20
          • 2011-11-24
          • 1970-01-01
          • 1970-01-01
          • 2012-10-16
          • 2023-03-11
          • 1970-01-01
          • 2014-12-09
          相关资源
          最近更新 更多