Скрытое значение POST json_decoded ничего не возвращает (или возвращает пустое) - PullRequest
0 голосов
/ 16 января 2019

РЕШЕНИЕ:


Как показывает 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)

Актуальная проблема:

json_decode для скрытого значения POST.

Я отправляю массив писем через скрытое поле формы:

<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']);

Я тоже могу это сделать.Это просто не может быть декодировано.Я застрял на этом, потому что я хочу понять, почему это не работает.Я бы запрограммировал это давным-давно, но я просто не могу отпустить это, не зная, почему это не работает ..

Могу ли я знать, ПОЧЕМУ я получил два минус голоса?Для вопросов?


Re: ADyson

Поле ввода моей формы перед отправкой:

<input name="emails2bsent" type="hidden" value="[&quot;email1@gmail.com&quot;,&quot;email2@gmail.com&quot;]">

Код Iиспользуйте для просмотра переданных данных:

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 голосов
/ 16 января 2019

Я подозреваю, что вам нужно кодировать JSON в формате HTML:

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

Допустимое значение JSON может привести к неверному HTML, и браузер может неправильно опубликовать его.

...