Передача объекта json в качестве параметра url

#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));