You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel创建Request实例前如何替换查询字符串中的编码字符?

解决查询字符串中%26导致参数提取错误的方案

可以通过自定义Laravel中间件在Request对象处理前拦截并修正查询字符串,具体步骤如下:

1. 创建自定义中间件

在终端执行Artisan命令生成中间件:

php artisan make:middleware FixEncodedAmpersandMiddleware

2. 编写中间件逻辑

打开app/Http/Middleware/FixEncodedAmpersandMiddleware.php,替换handle方法内容:

<?php

namespace App\Http\Middleware;

use Closure;

class FixEncodedAmpersandMiddleware
{
    public function handle($request, Closure $next)
    {
        // 获取原始查询字符串
        $queryString = $request->getQueryString();
        
        if ($queryString) {
            // 将编码的%26替换为&
            $fixedQueryString = str_replace('%26', '&', $queryString);
            
            // 重新构建请求的查询参数
            parse_str($fixedQueryString, $queryParams);
            $request->query->replace($queryParams);
        }

        return $next($request);
    }
}

3. 注册中间件

全局生效(所有请求都处理)

打开app/Http/Kernel.php,将中间件添加到$middleware数组:

protected $middleware = [
    // ... 其他中间件
    \App\Http\Middleware\FixEncodedAmpersandMiddleware::class,
];

仅针对API路由生效

如果只需要处理API请求,将中间件添加到$middlewareGroups的api组:

protected $middlewareGroups = [
    'api' => [
        // ... 其他中间件
        \App\Http\Middleware\FixEncodedAmpersandMiddleware::class,
    ],
];

4. 验证效果

当请求的查询字符串包含%26时,中间件会自动将其替换为&,Request对象就能正确解析出所有查询参数,和正常编码的请求结果一致。


内容的提问来源于stack exchange,提问作者gzmo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 12:37:05