我有一个脚本,在JSON.stringify()之后使用AJAX发布大型对象。
当我尝试使用json_decode($object, true);在PHP中对其进行解码时,将不会对其进行解码。
我的对象看起来像:
var object = [
{field_name:"Date & Time", some_other_value:"somevalue1"}
]
我相当确定它与Date & Time有关。 我很确定在构建对象时,插入到field_name中的值是Date & Time
在PHP中,我尝试过:
json_decode($object, true);
json_decode(utf8_decode($object))// with true as well.
json_decode(htmlentities($object, ENT_QUOTES,"UTF-8");
似乎没有任何工作。
更新:
我在stringify上使用了alert(),这就是我得到的:
"fields":{"29411502":{"id":29411502,"name":"Date & Time","functionName":""}}
有人有主意吗?
您的样本在技术上不是有效的JSON,并且不会/不应由JSON.stringify()生成。 (它的属性名称周围缺少引号。)您可以告诉我们JSON.stringify()的实际输出是什么吗?
是的将获得输出1秒
香港专业教育学院更新后的字符串我得到。 应该已经包括它了。 但是为什么要投反对票呢?
您的更新不是语法上有效的JSON。 至少,它缺少结束符}。
没错-它是一个更大的对象,我把它弄错了,但不是问题
听起来像是在发布时,您没有使用text / javascript内容类型。 &amps永远不会为我converted依。
万一有人在乎解决方案:
我必须在字符串对象上encodeURIcomponenet()。
为我工作
的test.html
Click ME
(function($){
$('#bob').click(function() {
$.ajax({
method:"POST",
url:"test.php",
data: JSON.stringify([{"this":"is & test"}]),
contentType:"text/javascript"
}).done(function(a) {
alert(a);
});
});
})(jQuery);
test.php的
$data = file_get_contents("php://input");
var_dump($data);
var_dump(json_decode($data, true));
产生一个漂亮的弹出窗口
string(26)"[{"this":"is & test"}]"
array(1) {
[0] =>
array(1) {
'this' =>
string(13)"is & test"
}
}
这个:
var_dump(
json_decode(
'[
{"field_name":"Date & Time","some_other_value":"somevalue1"},
{"field_name":"Date & Time","some_other_value":"somevalue2"},
{"field_name":"Date & Time","some_other_value":"somevalue3"}
]'
),
json_last_error(),
PHP_VERSION
);
?>
结果是:
array(3) {
[0]=>
object(stdClass)#1 (2) { ["field_name"]=>
string(15)"Date & Time"
["some_other_value"]=>
string(10)"somevalue1"
}
[1]=>
object(stdClass)#2 (2) { ["field_name"]=>
string(15)"Date & Time"
["some_other_value"]=>
string(10)"somevalue2"
}
[2]=>
object(stdClass)#3 (2) { ["field_name"]=>
string(15)"Date & Time"
["some_other_value"]=>
string(10)"somevalue3"
}
}
int(0)
string(17)"5.3.15-pl0-gentoo"
似乎对我来说...
如果删除了&字符,PHP脚本突然能够正确解码该对象吗?
是这样,您是否需要对&字符进行双重编码? 它是否有可能在剩余消息之前被解码并导致解析中断?
是如果我删除&它有效
在参数和值周围放置单引号
var object = [
{'field_name':'Date & Time', 'some_other_value':'somevalue1'},
....
不,那不是它。
根据JSON规范,应为双引号,而不是单引号。 参见例如:stackoverflow.com/questions/4201441/
哦,我的坏。日Thnx