gpt4 book ai didi

php - URL 编码似乎妨碍了我的 PHP 程序中正确的 json 编码/解码

转载 作者:可可西里 更新时间:2023-11-01 00:36:27 24 4
gpt4 key购买 nike

我正在实现一个 PHP 脚本,它接收一个 HTTP POST 消息,消息体中有一个 json 字符串,绑定(bind)到一个“报告”参数。所以 HTTP POST 报告=。我正在使用 SimpleTest(PHP 单元测试)对此进行测试。

我构建 json:

$array = array("type" => "start"); // DEBUG
$report = json_encode($array);

我发送 POST:

$this->post(LOCAL_URL, array("report"=>$json));

(从 SimpleTest 调用 WebTestCase 类中的方法)。

SimpleTest 说它发送这个:

POST /Receiver/web/report.php HTTP/1.0
Host: localhost:8888
Connection: close
Content-Length: 37
Content-Type: application/x-www-form-urlencoded

report=%7B%22type%22%3A%22start%22%7D

我收到这样的:

$report = $_POST['report'];    
$logger->debug("Content of the report parameter: $report");
$json = json_decode($report);

上面的调试语句给我:

Content of the report parameter: {\"type\":\"start\"}

当我解码时,它给出了错误

Syntax error, malformed JSON

'application/x-www-form-urlencoded' 内容类型由 SimpleTest 自动选择。当我将它设置为“application/json”时,我的 PHP 脚本看不到任何参数,因此找不到“report”变量。我想 url 编码出了点问题,但我不知道应该如何获得 json accross。

此外,这里通常的做法是什么?即使您只发送整个 json 主体,是否也使用键/值方法?或者我可以将 json 字符串转储到 HTTP POST 的正文中并以某种方式读出吗? (在没有变量指向的情况下,我没有成功地实际读出它)。

无论如何,我希望问题已经清楚地说明了。提前致谢。

节食者

最佳答案

听起来您启用了魔术引号(这是一个很大的禁忌)。我建议您禁用它,否则,通过 stripslashes() 运行所有输入。

但是,更好的做法是将 POST 数据引用为键/值对,否则您将不得不读取 php://input 流。

关于php - URL 编码似乎妨碍了我的 PHP 程序中正确的 json 编码/解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6445124/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com