我有一个脚本,在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":""}}
有想法的人吗?
答案 0 :(得分:1)
如果有人关心解决方案:
我必须在字符串化对象上使用encodeURIcomponenet()
。
答案 1 :(得分:0)
如果删除&字符是PHP脚本突然能够正确解码对象吗?
是这样,你可能需要在&符号上进行双重编码吗?是否有可能在消息的其余部分之前对其进行解码并导致解析中断?
答案 2 :(得分:0)
此:
<?php
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"
似乎对我来说......
答案 3 :(得分:0)
为我工作
的test.html
<html>
<body>
<script src="js/jquery/jquery-2.0.3.js"></script>
<button id="bob">Click ME</button>
<script>
(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);
</script>
</body>
</html>
test.php的
<?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"
}
}
答案 4 :(得分:-2)
在参数和值
周围放置单引号var object = [
{'field_name':'Date & Time', 'some_other_value':'somevalue1'},
....