gpt4 book ai didi

javascript - 文件获取内容 ('php://input' );使用 application/x-www-form-urlencoded;

转载 作者:可可西里 更新时间:2023-11-01 12:47:35 25 4
gpt4 key购买 nike

我在这里阅读了一些关于该主题的问题,但找不到我正在寻找的答案。我正在用 jQuery 将一些 $.post 发送到 PHP5.6 服务器。

$.post('/', {a:100, b:'test'}, function(data){
}, 'json');

控制台的编码是

Content-Type    application/x-www-form-urlencoded; charset=UTF-8

如果我尝试使用常规 $_POST 读取 POST 数据,PHP5.6 会提醒我

PHP Deprecated:  Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead

然后我尝试了这个建议,在 php.ini 中添加了 always_populate_raw_post_data = -1 和

json_decode(file_get_contents("php://input"));

PHP5.6 提醒我它是无效的

PHP Warning:  First parameter must either be an object or the name of an existing class

所以我转储了 file_get_contents("php://input") 并且它是一个字符串。

a=100&b="test"

所以我已经解析了字符串并编码然后解码

parse_str(file_get_contents("php://input"), $data);             
$data = json_decode(json_encode($data));
var_dump($data);

然后我终于将我的 $data 作为一个对象而不是数组,作为一个真正的 JSON 对象。

我现在继续使用 $_POST...但是后来我想知道升级 PHP...

这里的问题是,是否有更直接的解决方案,或者是否意味着使用 file_get_contents("php://input") 也意味着进行解析解码编码恶作剧?

编辑: 所以看起来这在多级 json 上不起作用。请考虑以下事项:

{"a":100, "b":{"c":"test"}}

在 Ajax/Post 中发送

{a:100, b:{c:"test"}}

parse_str(file_get_contents("php://input"), $post);
var_dump($post);

会输出

array(2) {
["a"]=>string(8) "100"
["b"]=>string(16) "{"c":"test"}"
}

或者做(按照建议)

parse_str(file_get_contents("php://input"), $post);
$post= (object)$post;

会输出

object(stdClass)#11 (2) {
["a"]=>string(8) "100"
["b"]=>string(16) "{"c":"test"}"

如何在不使用递归函数的情况下将 file_get_contents("php://input") 转换为具有相同“架构”的真实对象?

Edit2:我的错误,建议奏效了,我在注释中被 JSON.stringify 旁路了,这导致了错误。底线:它适用于 json_decode(json_encode($post)) 或 $post=(object)$post;

回顾一下,使用 jQuery $.post :

$.post('/', {a:100, b:{c:'test'}}, function(data){
}, 'json');

parse_str(file_get_contents("php://input"), $data);
$data = json_decode(json_encode($data));

parse_str(file_get_contents("php://input"), $data);
$data= (object)$data;

无需使用 JSON.stringify

最佳答案

在请求的 POST 正文中接收序列化/urlencoded POST 数据,您已经使用 parse_str() 将其正确转换为数组。

但是,编码然后解码 JSON 以将其转换为您正在寻找的对象(与数组相对)的步骤是不必要的。相反,PHP 会愉快地将关联数组转换为 stdClass 类的对象:

parse_str(file_get_contents("php://input"), $data);
// Cast it to an object
$data = (object)$data;

var_dump($data);

更多信息可用in the PHP documentation on type casting .

关于javascript - 文件获取内容 ('php://input' );使用 application/x-www-form-urlencoded;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25937775/

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