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

Nginx或PHP为何将空格转为下划线?如何解决该问题?

问题解答

1. 空格转下划线的来源

这个转换是PHP完成的,和Nginx无关。PHP默认会将GET/POST参数名中的非字母数字字符(包括空格、连字符等)替换为下划线,目的是让参数名符合PHP变量命名规则(变量名只能包含字母、数字和下划线,且不能以数字开头)。哪怕你直接访问index.php?this folder,PHP也会自动把参数名转为this_folder存入$_GET。

2. 获取原始带空格的参数名的方法

要绕过PHP的自动转换,需要直接读取原始的查询字符串并手动解析,而不是依赖$_GET数组:

// 获取Nginx传递过来的原始查询字符串
$rawQuery = $_SERVER['QUERY_STRING'];

// 手动解析原始查询字符串,保留原始参数名
$originalParams = [];
foreach (explode('&', $rawQuery) as $paramPair) {
    // 分割键值对,最多分割1次,避免值里包含=的情况
    [$key, $value] = explode('=', $paramPair, 2) + ['', ''];
    // 解码URL编码的键和值
    $originalKey = rawurldecode($key);
    $originalValue = rawurldecode($value);
    $originalParams[$originalKey] = $originalValue;
}

// 现在可以通过$originalParams['this folder']获取原始参数
echo $originalParams['this folder'];

补充说明

Nginx的rewrite指令只是将路径部分原样转为查询字符串(比如this%20folder会被完整传递给PHP),并没有修改参数名。你可以查看Nginx的访问日志,确认传递给PHP的查询字符串是原始编码后的内容,进一步验证这一点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 06:32:41