【问题标题】:PHP, Invalid characters in JSON decodePHP,JSON解码中的无效字符
【发布时间】:2013-07-19 18:20:20
【问题描述】:

我无法让 json_decode 处理我收到的特定字符串。

我已将范围缩小到这一行:

"systemNotes[6]": "2013 年 1 月 9 日下午 12:52 - 测试名称 - 将账单地址 2 从更改为发货名字:发货姓氏:电子邮件地址:发货地址:发货地址 2:发货城市:运送邮编/邮政:运送国家:运送国家:电话:账单名:账单姓氏:账单地址:账单地址 2:账单 C"

从这个问题复制 json,问题不可重现 - 但原始 json 的代表性 sn-p 在这里:http://codepad.org/ZzrC7rqQ - 并将其放入 jsonlint.com 给出:

Parse error on line 3:
...  "systemNotes[6]": "January 09, 2013 12
-----------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['

这个字符串有什么问题导致它是无效的 json?

编辑

我设法找到了确切的代码。

"systemNotes[6]":"January+09%2C+2013+12%3A52+PM+-+First+Name+-+Changed++Billing+Address+2+From++to+Shipping+First+Name %3A%09+运费+姓氏+姓名%3A%09+电子邮件+地址%3A%09+运费+地址%3A+%09+运费+地址+2%3A+%09+运费+城市%3A+%09+运费+Zip%2F邮政%3A+%09+运费+国家/地区%3A+%09+运费+州%3A+%09+电话%3A+%09+帐单+名字%3A+%09+帐单+姓氏%3A+%09 +帐单+地址%3A+%09+帐单+地址+2%3A+%09+帐单+C"

这似乎没问题,所以问题可能出在我执行 parse_str 时,这是我正在使用的代码:

$response = apiConnection($data);
parse_str($response, $parse);
$each = json_decode($parse['data']);
foreach($each as $key => $order){
   //do something
}

【问题讨论】:

  • 你是如何收集字符串的?
  • 我正在查询一个 API,它把它作为一个字符串发回给我。然后我使用 parse_str 将其留在数组中。
  • 你能检查字符串是否包含非 UTF 8 字符吗?
  • 感谢 AD7six 的链接:codepad.org/ZzrC7rqQ
  • 出于好奇,传递过来的字符串是怎么生成的?它在你的控制之下吗?

标签: php json


【解决方案1】:

问题是制表符在字符串中无效。

删除像 http://codepad.org/8fnQphkS 这样的制表符并在 jsonlint.com 上使用它,您将看到它现在看到有效的 json。

查看http://www.ietf.org/rfc/rfc4627.txt?number=4627 的 JSON 规范,特别是第 2.5 部分,其中制表符按名称作为在字符串中必须转义的字符之一。 p>

编辑:

这是一种去除所有制表符和多个空格并用单个空格字符替换它们的方法:

$data = preg_replace('/[ ]{2,}|[\t]/', ' ', trim($data));

【讨论】:

  • 他最好在 他删除 url 编码之前解码 json。
  • $data = preg_replace('/[\s]+|[\t]/', ' ', trim($data)); - 所有类型的空格
  • 如果您要继续修改整个字符串,那么只需将一个或多个空白字符替换为单个文字空格。 '/\s+/', ' '
【解决方案2】:

您尝试过类似的方法吗?这将有助于清理你的字符串

$yourstring = preg_replace('/[^(\x20-\x7F)]*/','', $yourstring);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-12
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多