【问题标题】:Passing json object as url parameter将 json 对象作为 url 参数传递
【发布时间】:2017-03-04 17:16:40
【问题描述】:
<?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:\wamp\www\Hack\Post.php:16:string 'Array' (length=5)。 它正在打印“数组”而不是 json 对象。我该怎么办?

【问题讨论】:

  • URI 长度有限制。您应该通过 POST 传递 JSON 数据
  • 从 json 解码函数中移除 True
  • @RuslanOsmanov IMO 长度限制约为 2000 个字符

标签: php json url


【解决方案1】:

正如 1slock 所说,您必须对 json 进行编码,但还要添加 urlencode。

header("Location: Post.php?json=" . urlencode( json_encode($jsonData)) );

【讨论】:

  • 我会使用 base 64 编码来完成这项工作。
  • urlencode 应该是足够的并且应该适用于任何类型的数据。问题是 json 是否太大,因为服务器和浏览器可以根据其配置对其进行裁剪。
【解决方案2】:

在您的第一个代码示例中,您传递的不是 json_encoded 值,而是数组本身。用这个替换你的最后一行,并跳过倒数第二行:

header("Location: Post.php?json=" . json_encode($jsonData));

【讨论】:

    【解决方案3】:

    当你执行 json_encode 时,你必须有一个变量来存储结果:

    $jsonData = json_encode($jsonData)
    

    没有这个,你的数据仍然只是一个 php 对象

    【讨论】:

    • 部分正确。没有urlencode(),很多事情都会失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多