PHP,JSON解码中的无效字符


PHP, Invalid characters in JSON decode

我在让json_decode处理我正在接收的特定字符串时遇到问题。

我把范围缩小到这一行:

"systemNotes[6]":"2013年1月9日下午12:52-测试名称-将计费地址2从更改为发货名:发货姓:电子邮件地址:发货地址2:发货城市:发货邮编/邮政编码:发货国家:发货州:电话:计费名:计费姓:计费地址:计费地址2:计费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+Shippining+State%3A+%09%Phone%3A+%00+Billing+First+Name%3A+%05+Billing+Last+Name%3A+%09+帐单+地址%3A+%09+账单+地址ss+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
}

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

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

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

编辑:

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

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

你试过这样的东西吗?这将有助于清理字符串

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