直接用 $_get 遍历即可获取全部 url 参数,php 已自动解析并 urldecode;空参数值为空字符串,重复键只保留最后一个;需校验键名并转义输出以防 xss;特殊需求(如多值、原始编码)才用 $_server['query_string'] + parse_str() 或手动解析。

直接用 $_GET 遍历就能拿到全部 URL 参数,无需解析原始字符串
PHP 已经在请求开始时自动将 URL 查询字符串(?a=1&b=2&c=)解析为关联数组存入 $_GET,所以不需要手动调用 parse_url() 或 parse_str()——除非你处理的是非标准 URL 或需要原始未解码值。
常见错误是试图从 $_SERVER['QUERY_STRING'] 手动解析,结果重复解码、忽略空值或漏掉键名含特殊字符的参数。
-
$_GET中的键和值默认已做urldecode()处理(如%20→ 空格) - 空参数(如
?x=&y=1)中$_GET['x']是空字符串,不是null或未定义 - 重复键名(如
?id=1&id=2)只保留最后一个值,PHP 不支持原生多值数组
遍历 $_GET 的安全写法:检查是否为空 + 过滤键名
直接 foreach ($_GET as $k => $v) 可能暴露调试信息或触发 XSS(如果输出未转义)。实际项目中应先判断是否有参数,并对键名做基础校验。
<?php
if (!empty($_GET)) {
foreach ($_GET as $key => $value) {
// 跳过可能的恶意键名(如含 \0、/、. 或以 _ 开头的超全局变量名)
if (is_string($key) && preg_match('/^[a-zA-Z0-9_\-]+$/', $key)) {
echo htmlspecialchars($key) . ' = ' . htmlspecialchars((string)$value) . "<br>\n";
}
}
}
?>
- 不用
isset($_GET)——$_GET永远存在,空时是空数组 - 避免直接
echo $value,尤其当参数会输出到 HTML 中时 - 若需保留原始编码(比如调试用),改用
$_SERVER['QUERY_STRING']+parse_str(),但要注意它不处理重复键
要保留重复参数或处理原始编码?用 parse_str() + $_SERVER['QUERY_STRING']
当 URL 是 ?tag=php&tag=web&raw=%2Fpath%2F,且你需要两个 tag 值或原始 %2F 字符串时,$_GET 不够用。
立即学习“PHP免费学习笔记(深入)”;
-
$_SERVER['QUERY_STRING']返回原始未解码字符串(如tag=php&tag=web&raw=%2Fpath%2F) -
parse_str()默认覆盖同名键,需配合explode()和parse_str()单条处理才能保留多值 - 示例提取所有
tag参数:
$qs = $_SERVER['QUERY_STRING'] ?? '';
parse_str($qs, $parsed);
// 但 $parsed['tag'] 仍是单值 → 改用:
$parts = explode('&', $qs);
$tags = [];
foreach ($parts as $part) {
if (strpos($part, 'tag=') === 0) {
$val = substr($part, 4);
$tags[] = rawurldecode($val); // 保持原始 % 编码逻辑
}
}
注意 $_GET 在 CLI 模式下为空,且受 variables_order 配置影响
在命令行运行 PHP(如 php script.php?a=1)时,$_GET 不会自动填充——CLI 没有 URL,参数进的是 $argv。另外,若 php.ini 中 variables_order 去掉了 G,$_GET 将不可用(极少见,但内网定制环境可能出现)。
- 检查是否可用:
var_dump(ini_get('variables_order'));,输出应含G - CLI 下模拟 GET 参数可手动赋值:
$_GET = ['a' => '1'];,但仅限测试 - Web 服务器重写(如 Nginx 的
try_files)可能导致查询字符串丢失,需确认$args是否透传
真正容易被忽略的是:URL 中带数组语法(?arr[]=1&arr[]=2)会被 PHP 自动转成 $_GET['arr'] = [1,2],但如果你用 parse_str() 手动解析,必须开启 enable_dl 或用正则预处理,否则得不到数组结构。










