#php #json #url
#php #json #url
Вопрос:
<?php
$jsonData = array(
"comments" => "Fresh food",
"container" => false,
"cookedTime" => 2,
"description" => "biryani",
"refridgeration" => true,
"serves" => 2,
"veg" => true
);
json_encode($jsonData);
header("Location:Post.php?json=$jsonData");
?>
Это моя страница php, которая содержит объект json. Я передаю этот объект json на другую страницу Post.php .
<?php
$jsonData = $_GET['json'];
json_decode($jsonData, TRUE);
echo var_dump($jsonData);
?>
когда я сделал дамп, результат C:wampwwwHackPost.php:16:string ‘Array’ (длина=5).
Вместо объекта json выводится «Массив». Что мне делать?
Комментарии:
1. Длина URI ограничена. Вы должны передавать данные JSON через POST
2. Удалить True из функции декодирования json
3. @RuslanOsmanov ИМО, ограничение по длине составляет около 2000 символов
Ответ №1:
Как говорит 1slock, вам нужно не только закодировать json, но и добавить urlencode.
header("Location: Post.php?json=" . urlencode( json_encode($jsonData)) );
Комментарии:
1. Я бы использовал кодировку base 64, чтобы это работало повсеместно.
2. urlencode должно быть достаточно и должно работать для любого типа данных. Проблема в том, что json слишком большой, потому что сервер и браузер могут обрезать его в зависимости от его конфигурации.
Ответ №2:
Когда вы выполняете json_encode, у вас должна быть переменная для сохранения результата:
$jsonData = json_encode($jsonData)
Без этого ваши данные по-прежнему будут просто объектом php
Комментарии:
1. Частично верно. Без этого многие вещи завершатся неудачей
urlencode()
.
Ответ №3:
В вашем первом примере кода вы передаете не значение json_encoded, а сам массив. Замените последнюю строку на эту и пропустите предпоследнюю строку:
header("Location: Post.php?json=" . json_encode($jsonData));