在php开发中,前端通过url传递多个get参数是非常常见的场景,比如列表筛选、搜索功能等都需要接收多个get参数来完成业务逻辑。php提供了多种方式来获取这些参数,开发者可以根据实际需求选择合适的方法。

通过全局数组直接获取单个参数
php内置了$_GET超全局数组,所有通过url传递的get参数都会被自动存储到这个数组中,数组的键就是参数的名称,值就是参数对应的值。我们可以直接通过参数名作为键来访问对应的参数值。
比如当前访问的url是http://ipipp.com/index.php?name=test&age=20&city=beijing,要获取name、age、city三个参数,代码如下:
<?php // 获取单个get参数 $name = $_GET['name'] ?? ''; // 使用空合并运算符避免参数不存在时报错 $age = $_GET['age'] ?? ''; $city = $_GET['city'] ?? ''; echo "姓名:$name<br/>"; echo "年龄:$age<br/>"; echo "城市:$city<br/>"; ?>
遍历获取所有get参数
如果不确定url中传递了多少个get参数,或者需要批量处理所有参数,可以通过遍历$_GET数组的方式获取所有参数。常用的遍历方式有foreach循环和array_keys配合循环的方式。
使用foreach遍历
foreach可以直接遍历$_GET数组的键值对,适合需要同时处理参数名和参数值的场景。
<?php
// 遍历所有get参数
foreach ($_GET as $key => $value) {
echo "参数名:$key,参数值:$value<br/>";
}
?>
获取所有参数名或参数值
如果只需要获取所有参数的名称或者所有参数的值,可以使用array_keys和array_values函数。
<?php
// 获取所有参数名
$paramNames = array_keys($_GET);
echo "所有参数名:" . implode(',', $paramNames) . "<br/>";
// 获取所有参数值
$paramValues = array_values($_GET);
echo "所有参数值:" . implode(',', $paramValues) . "<br/>";
?>
处理特殊场景的get参数
参数不存在时的默认值设置
如果直接访问$_GET['param'],当参数不存在时会报未定义数组索引的错误,所以建议给参数设置默认值。除了使用空合并运算符,还可以使用isset函数判断。
<?php // 方式1:使用isset判断 $page = isset($_GET['page']) ? $_GET['page'] : 1; // 方式2:使用空合并运算符(php7及以上支持) $page = $_GET['page'] ?? 1; echo "当前页码:$page"; ?>
处理数组形式的get参数
有时候前端会传递数组形式的get参数,比如http://ipipp.com/index.php?hobby[]=篮球&hobby[]=足球&hobby[]=羽毛球,此时$_GET['hobby']的值就是一个数组,我们可以通过遍历数组的方式处理。
<?php
$hobby = $_GET['hobby'] ?? [];
if (!empty($hobby)) {
echo "你的爱好有:<br/>";
foreach ($hobby as $item) {
echo "- $item<br/>";
}
}
?>
参数值的过滤处理
get参数的值是用户可控的,直接使用时可能存在安全风险,比如xss攻击,所以建议对获取到的参数值进行过滤。可以使用htmlspecialchars函数转义特殊字符。
<?php $content = $_GET['content'] ?? ''; // 转义特殊字符,避免xss攻击 $safeContent = htmlspecialchars($content, ENT_QUOTES, 'UTF-8'); echo "过滤后的内容:$safeContent"; ?>
常见注意事项
$_GET数组只能接收通过url传递的get参数,无法接收post请求的参数,post参数需要使用$_POST数组获取。- get参数会暴露在url中,所以不要用来传递敏感信息,比如密码、token等。
- url中的参数值如果包含中文或者特殊字符,前端需要进行url编码,php接收到后会自动解码,不需要额外处理。
- 如果url中同一个参数名出现多次,比如
?a=1&a=2,$_GET['a']只会获取到最后一个值2,如果需要获取所有值,需要让前端以数组形式传递参数。