URL参数是附加在URL末尾的键值对,用于向服务器传递数据。它们通常以问号(?)开始,多个参数之间用&符号分隔,例如:http://example.com/page.php?name=John&age=30
。
$_GET
超全局数组这是最常用的获取URL参数的方法:
// 假设URL是 http://example.com/page.php?name=John&age=30
$name = $_GET['name']; // 获取name参数的值 "John"
$age = $_GET['age']; // 获取age参数的值 "30"
// 安全起见,应该先检查参数是否存在
if (isset($_GET['name'])) {
$name = $_GET['name'];
} else {
$name = '默认值';
}
filter_input()
函数(更安全)$name = filter_input(INPUT_GET, 'name', FILTER_SANITIZE_STRING);
$age = filter_input(INPUT_GET, 'age', FILTER_SANITIZE_NUMBER_INT);
$queryString = $_SERVER['QUERY_STRING']; // 获取"name=John&age=30"
// 获取并解析所有GET参数
$params = $_GET;
// 遍历所有参数
foreach ($params as $key => $value) {
echo "参数名: $key, 值: $value <br>";
}
htmlspecialchars()
或filter_var()
过滤输入// 安全获取参数的示例
$name = isset($_GET['name']) ? htmlspecialchars($_GET['name']) : '默认名';
$age = isset($_GET['age']) ? intval($_GET['age']) : 0;
page.php?page=2
search.php?query=keyword
product.php?id=123
products.php?category=electronics&price=100-500
原因:用户可能没有提供该参数或URL拼写错误
解决:使用isset()
检查参数是否存在
$param = isset($_GET['param']) ? $_GET['param'] : 'default';
原因:参数中包含&、?等特殊字符
解决:使用urlencode()
和urldecode()
处理
$encodedValue = urlencode('特殊&字符');
$decodedValue = urldecode($_GET['param']);
URL示例:page.php?colors[]=red&colors[]=blue
if (isset($_GET['colors']) && is_array($_GET['colors'])) {
foreach ($_GET['colors'] as $color) {
echo htmlspecialchars($color) . "<br>";
}
}
$currentUrl = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
通过以上方法,您可以安全有效地在PHP中获取和处理URL参数。