1.$_SERVER['QUERY_STRING']
`$_SERVER['QUERY_STRING']` 是一个 PHP 超全局变量,它包含了 URL 中 `?` 后面的查询字符串部分。查询字符串是 URL 的一部分,用于在请求中发送数据。查询字符串由一系列的参数组成,参数之间用 `&` 符号分隔。
以下是 `$_SERVER['QUERY_STRING']` 的一些用法示例:
获取查询字符串
echo $_SERVER['QUERY_STRING'];
拆分查询字符串为数组
可以使用 `parse_str()` 函数将查询字符串解析为变量。
parse_str($_SERVER['QUERY_STRING'], $query_vars);
print_r($query_vars);
获取特定的查询参数
可以通过直接访问数组的方式获取查询字符串中的特定参数。
// 假设查询字符串是 "id=123&name=John"
$id = isset($_SERVER['QUERY_STRING']) ? $_GET['id'] : null;
$name = isset($_SERVER['QUERY_STRING']) ? $_GET['name'] : null;
echo "ID: " . $id . "<br>";
echo "Name: " . $name . "<br>";
使用查询参数执行操作
可以根据查询参数的值来执行不同的操作。
if (isset($_GET['action']) && $_GET['action'] == 'delete') {
// 执行删除操作
echo "Deleting item...";
} else if (isset($_GET['action']) && $_GET['action'] == 'update') {
// 执行更新操作
echo "Updating item...";
}
重定向到新的查询字符串
可以使用 `header()` 函数重定向到包含新查询字符串的 URL。
header("Location: somepage.php?newparam=value");
exit;
注意事项
- 始终对从查询字符串中获取的数据进行验证和清理,以防止安全漏洞,如 XSS 攻击或 SQL 注入。
- 如果查询字符串为空,`$_SERVER['QUERY_STRING']` 将是一个空字符串,而不是 `null`。
使用 `$_SERVER['QUERY_STRING']` 可以方便地处理 URL 参数,但请记得在生产环境中谨慎使用,确保数据的安全性。
例子
来看一个查询字符串的使用实例。假设有一个用于搜索书籍的简单网页界面,用户可以输入他们想要搜索的书籍名称,然后提交表单。查询字符串将用于传递用户输入的搜索词到服务器端脚本。
1. HTML 表单
首先,我们有一个HTML表单用于用户输入搜索词:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Book Search</title>
</head>
<body>
<form action="search.php" method="get">
<label for="search">Search for a book:</label>
<input type="text" id="search" name="query" placeholder="Enter book title">
<input type="submit" value="Search">
</form>
</body>
</html>
在这个表单中,当用户填写搜索词并点击“Search”按钮时,浏览器会发送一个GET请求到 search.php
,同时将用户输入的搜索词作为查询字符串附加到URL后面。
2.生成的查询字符串
如果用户输入了“MVC Frameworks”作为搜索词并提交表单,生成的URL可能如下所示:
http://www.example.com/search.php?query=MVC+Frameworks
这里的查询字符串是 query=MVC+Frameworks
。
3.PHP脚本处理查询字符串
接下来是 search.php
脚本,它将解析查询字符串并执行搜索:
<?php
// search.php
// 使用 $_SERVER['QUERY_STRING'] 获取查询字符串
$queryString = $_SERVER['QUERY_STRING'];
// 使用 parse_str() 函数解析查询字符串
parse_str($queryString, $query);
// 检查 'query' 参数是否存在
if (isset($query['query'])) {
// 获取查询词
$searchTerm = $query['query'];
// 假设 $connection 是一个已经建立的数据库连接
// 对查询词进行转义以防止SQL注入
$searchTerm = mysqli_real_escape_string($connection, $searchTerm);
// 构建SQL查询
$sql = "SELECT * FROM books WHERE title LIKE '%$searchTerm%'";
// 执行查询并显示结果
$result = mysqli_query($connection, $sql);
while ($row = mysqli_fetch_assoc($result)) {
// 使用 htmlspecialchars() 防止潜在的XSS攻击
echo htmlspecialchars($row['title']) . "<br>";
}
} else {
// 如果没有提供查询词,显示一个消息
echo "No search term provided.";
}
// 注意:在实际应用中,你需要确保 $connection 是有效的数据库连接。
?>
在这个脚本中我们首先获取了 $_SERVER['QUERY_STRING']
的值,它包含了整个查询字符串。然后,我们使用 parse_str()
函数将查询字符串解析为一个数组。如果存在 query
参数,我们从数组中取出它,并继续执行搜索逻辑。
注意事项
- 在处理查询字符串时,始终对用户输入进行验证和清理。
- 使用
htmlspecialchars()
来避免潜在的跨站脚本(XSS)攻击。 - 使用预处理语句(PDO或mysqli)来避免SQL注入。