请教一个问题,获取 post 数据,数据中含有&,根据&将数据切割了

最近在对接腾讯云直播,收到回调,出现一个问题,腾讯云回调时会发一个post请求过来:
请教一个问题,获取post数据
但是收到时,用$request->post()获取结果时,发现会把&将数据切割了,用file_get_contents('php://input')符合预期,这是为什么?
请教一个问题,获取post数据
请教一个问题,获取post数据

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
Epona
最佳答案

感觉是你postman 拼的参数不对? raw 的时候右边我选的是json,还是说 数据结构就是这样的?另外可以直接调用回调试试,而不是用postman

4年前 评论
FanLee (楼主) 4年前
讨论数量: 2
Epona

感觉是你postman 拼的参数不对? raw 的时候右边我选的是json,还是说 数据结构就是这样的?另外可以直接调用回调试试,而不是用postman

4年前 评论
FanLee (楼主) 4年前

你打印一下请求头信息的CONTENT_TYPE的值,我怀疑其值是application/x-www-form-urlencoded,如果是这样的话,那就是有问题的

    //\Symfony\Component\HttpFoundation\Request::createFromGlobals
    public static function createFromGlobals()
    {
        // With the php's bug #66606, the php's built-in web server
        // stores the Content-Type and Content-Length header values in
        // HTTP_CONTENT_TYPE and HTTP_CONTENT_LENGTH fields.
        $server = $_SERVER;
        if ('cli-server' === \PHP_SAPI) {
            if (\array_key_exists('HTTP_CONTENT_LENGTH', $_SERVER)) {
                $server['CONTENT_LENGTH'] = $_SERVER['HTTP_CONTENT_LENGTH'];
            }
            if (\array_key_exists('HTTP_CONTENT_TYPE', $_SERVER)) {
                $server['CONTENT_TYPE'] = $_SERVER['HTTP_CONTENT_TYPE'];
            }
        }

        $request = self::createRequestFromFactory($_GET, $_POST, [], $_COOKIE, $_FILES, $server);

        if (0 === strpos($request->headers->get('CONTENT_TYPE'), 'application/x-www-form-urlencoded')
            && \in_array(strtoupper($request->server->get('REQUEST_METHOD', 'GET')), ['PUT', 'DELETE', 'PATCH'])
        ) {
            parse_str($request->getContent(), $data);
            $request->request = new ParameterBag($data);
        }

        return $request;
    }
4年前 评论
FanLee (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!