解决方案:
如var_dump所示,引号已替换为ascii(?)
'emails2bsent' => string '["email1@gmail.com","email2@gmail.com"]'
运行preg_replace并强制将其更改回常规引号即可解决问题:
$_POST = preg_replace("/"/", "\"", $_POST);
$json = $_POST['emails2bsent'];
var_dump(json_decode($json));
var_dump(json_decode($json, true));
输出:
array (size=2)
0 => string 'email1@gmail.com' (length=23)
1 => string 'email2@gmail.com' (length=23)
array (size=2)
0 => string 'email1@gmail.com' (length=23)
1 => string 'email2@gmail.com' (length=23)
实际问题:
关于POST隐藏值的json_decode。
我正在通过表单的隐藏字段发送一系列电子邮件:
<input name="emails2bsent" type="hidden" value='<?php echo json_encode($emails2bsent)?>' />
,然后尝试取回数组:
$emails2bsent = json_decode($_POST['emails2bsent'], true);
或
$emails2bsent = json_decode($_POST['emails2bsent']);
它什么也不返回。 我在做什么错了?
编辑:
目标页面上的print_r输出显示以下内容:
Array
(
[reminder] => Some copy goes here,
[button] => Send
[go3] => three
[reminder_ID] => 198
[emails2bsent] => ["email1@gmail.com","email2@gmail.com"]
)
当我想访问 $ _ POST ['emails2bsent']
echo($_POST['emails2bsent']);
我也可以做到。 只是无法解码。我被困在这个小岛上,我想了解为什么这不起作用。我会在很久以前就对它进行编程,但是在不知道为什么它不起作用的情况下我无法放手。
我是否可以知道为什么我得了两票? 要问问题吗?
回复:ADyson
我的表单输入字段在发送之前:
<input name="emails2bsent" type="hidden" value="["email1@gmail.com","email2@gmail.com"]">
我用来查看传递的数据的代码:
pre($_POST);
echo($_POST['emails2bsent']);
$out = json_decode($_POST['emails2bsent'], true);
echo '<br>out: ' . $out;
页面上的输出:
Array
(
[reminder] => The copy
[button] => send
[go3] => three
[reminder_ID] => 198
[emails2bsent] => ["email1@gmail.com","email2@gmail.com"]
)
["email1@gmail.com","email2@gmail.com"]
out:
答案 0 :(得分:1)
我怀疑您需要对JSON进行HTML编码:
<input name="emails2bsent"
type="hidden"
value="<?php echo htmlspecialchars(json_encode($emails2bsent)); ?>">
有效JSON可能会导致HTML无效,并且浏览器可能无法正确发布它。