我发送php数组作为json格式,但我无法解码该值。 以下是我制作数组的方法
$ads = $atts['ads'];
if (sizeof($ads) > 0) {
foreach($ads as $social_item) {
$sdbr = $social_item['sidebar'];
$pno = $social_item['no'];
$out[$sdbr] = $pno;
}
}
哪个输出
array (
'Full width ad 1' => 2,
'sidebar-1' => 3,
)
现在我有json编码
$myJSON = json_encode($out);
json格式化值{"Full width ad 1":2,"sidebar-1":3}
然后我通过数据属性值
echo "<div data-ad = '$myJSON' class='ash_loadmore'><span>LOAD MORE</span>
</div>";
我得到了
$ad = $_POST['ad'];
array (
'Full width ad 1' => '2',
'sidebar-1' => '3',
)
现在是解码输出的时间
$out = json_decode($ad,TRUE);
var_dump($out); // Returns NULL although the array value is present
但是如果我把json格式的数据放得很好
$out = json_decode('{"Full width ad 1":2,"sidebar-1":3}',TRUE);
var_dump($out);
我怀疑在json编码之前,数组array(2) { ["Full width ad 1"]=> int(2) ["sidebar-1"]=> int(3) }
的值是int
,但我的值是string
array(2) { ["Full width ad 1"]=> string(1) "2" ["sidebar-1"]=> string(1) "3" }
我做错了什么?
答案 0 :(得分:4)
完成此步骤后:
$ad = $_POST['ad'];
array (
'Full width ad 1' => '2',
'sidebar-1' => '3',
)
你在输出中看到这已经是一个php数组了,所以任何json-decode方法都会失败(这不是json)。
您可以根据自己的需要立即使用阵列;)
答案 1 :(得分:1)
我认为将序列化的JSON放在html属性中可能会导致问题。
它可能导致问题的原因是因为您的JSON可能包含“或'等字符,并且它是您的输出,因此它可能会破坏您的HTML语法。
我猜你是通过AJAX将JSON发送回一些PHP脚本,因此从损坏的HTML元素中读取JSON可能会获取无效的JSON数据。
解决此问题的方法是使用...
$myJSON = htmlentities($str, ENT_QUOTES);
...然后将其输出为HTML。这将只编码引号字符。
您还应该使用...
在PHP端点上对其进行解码$ad = html_entity_decode($ad, ENT_QUOTES);
$out = json_decode($ad,TRUE);
希望这有帮助。