json_decoded隐藏的POST值不返回任何内容(或返回空值)

时间:2019-01-16 11:43:37

标签: php json hidden-field

解决方案:


如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="[&quot;email1@gmail.com&quot;,&quot;email2@gmail.com&quot;]">

我用来查看传递的数据的代码:

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: 

1 个答案:

答案 0 :(得分:1)

我怀疑您需要对JSON进行HTML编码:

<input name="emails2bsent"
       type="hidden"
       value="<?php echo htmlspecialchars(json_encode($emails2bsent)); ?>">

有效JSON可能会导致HTML无效,并且浏览器可能无法正确发布它。