微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP,JSON解码中的字符无效

我遇到麻烦让json_decode处理我收到的特定字符串.

我把它缩小到这条线:

“systemNotes[6]”: “January 09,2013 12:52 PM – Test Name – Changed Billing Address 2 From to Shipping First Name: Shipping Last Name: Email Address: Shipping Address: Shipping Address 2: Shipping City: Shipping Zip/Postal: Shipping Country: Shipping State: Phone: Billing First Name: Billing Last Name: Billing Address: Billing Address 2: Billing C”

从这个问题中复制json,问题是不可重现的 – 但原始json的代表片段在这里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+Shipping+Last+Name%3A%09+Email+Address%3A%09+Shipping+Address%3A+%09+Shipping+Address+2%3A+%09+Shipping+City%3A+%09+Shipping+Zip%2FPostal%3A+%09+Shipping+Country%3A+%09+Shipping+State%3A+%09+Phone%3A+%09+Billing+First+Name%3A+%09+Billing+Last+Name%3A+%09+Billing+Address%3A+%09+Billing+Address+2%3A+%09+Billing+C”

这似乎没问题所以也许问题来自于我做parse_str时,这是我正在使用的代码

$response = apiConnection($data);
parse_str($response,$parse);
$each = json_decode($parse['data']);
foreach($each as $key => $order){
   //do something
}
问题是制表符在字符串中无效.

删除像这里http://codepad.org/8fnQphkS这样的标签字符并在jsonlint.com上使用它你会看到它现在看到有效的json.

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

编辑:

这是一种剥离所有选项卡和多个空格并用单个空格字符替换它们的方法

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

原文地址:https://www.jb51.cc/php/134619.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐