PHP $_GET 变量(手把手讲解)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战(已更新的所有项目都能学习) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新开坑项目:《Spring AI 项目实战》 正在持续爆肝中,基于 Spring AI + Spring Boot 3.x + JDK 21..., 点击查看 ;
  • 《从零手撸:仿小红书(微服务架构)》 已完结,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观

前言

在 Web 开发中,数据传递是核心功能之一。PHP 的 $_GET 变量作为超全局数组,是实现客户端与服务器端数据交互的重要工具。它允许开发者通过 URL 参数传递信息,广泛应用于表单提交、分页处理、动态内容加载等场景。对于编程初学者而言,理解 $_GET 的工作原理和使用方法,能快速提升 Web 开发能力;对于中级开发者,深入掌握其安全性、优化技巧和最佳实践,则能进一步提升代码质量。

本文将从基础概念讲起,结合案例和代码示例,逐步解析 $_GET 变量的使用场景、注意事项及进阶技巧。


一、什么是 $_GET 变量?

1.1 基本概念

$_GET 是 PHP 内置的超全局数组(Super Global Array),用于接收通过 HTTP GET 方法提交的数据。当用户访问包含查询参数的 URL 时,参数会以键值对的形式存储在 $_GET 中。例如,访问 https://example.com/page.php?name=John&id=123,URL 中的 nameid 参数会被自动存入 $_GET 数组。

1.2 与 HTTP GET 方法的关系

HTTP 协议中,GET 方法用于向服务器请求数据,数据通过 URL 的查询字符串传递。这种方式的特点是:

  • 安全性较低:参数直接暴露在 URL 中,适合非敏感信息的传输。
  • 缓存友好:浏览器和代理服务器可以缓存 GET 请求的结果。
  • 书签和分享方便:用户可以直接复制 URL 并分享。

1.3 形象比喻

可以将 $_GET 变量想象为一个“快递单”:

  • URL 是快递的地址,包含收件人信息(参数)。
  • 服务器 是快递员,根据地址提取包裹(参数值)并处理请求。

二、$_GET 变量的使用方法

2.1 基础语法

通过 $_GET['参数名'] 可以直接访问对应的参数值。例如:

<?php  
// 获取 name 参数的值  
if (isset($_GET['name'])) {  
    echo "欢迎," . htmlspecialchars($_GET['name']);  
} else {  
    echo "请输入姓名!";  
}  
?>  

2.2 构建带有查询参数的 URL

在 HTML 表单或超链接中,通过 method="get" 或直接拼接查询字符串实现:

表单示例

<form action="process.php" method="get">  
    <input type="text" name="username" placeholder="请输入用户名">  
    <input type="submit" value="提交">  
</form>  

超链接示例

<a href="profile.php?id=456">查看用户资料</a>  

2.3 处理空值和安全性

2.3.1 检查参数是否存在

使用 isset() 函数避免未定义索引的错误:

if (isset($_GET['keyword'])) {  
    $keyword = $_GET['keyword'];  
} else {  
    $keyword = '';  
}  

2.3.2 转义特殊字符

防止 XSS 攻击,使用 htmlspecialchars() 对输出内容进行转义:

echo "搜索关键词:" . htmlspecialchars($_GET['keyword'], ENT_QUOTES, 'UTF-8');  

三、$_GET 变量的典型应用场景

3.1 动态内容加载

案例:根据用户选择的分类显示文章列表。

URLarticles.php?category=technology

<?php  
$category = $_GET['category'] ?? 'default';  
switch ($category) {  
    case 'technology':  
        echo "显示技术类文章";  
        break;  
    case 'lifestyle':  
        echo "显示生活类文章";  
        break;  
    default:  
        echo "请选择分类";  
}  
?>  

3.2 分页功能实现

URLproducts.php?page=3

<?php  
$page = $_GET['page'] ?? 1;  
$itemsPerPage = 10;  
$offset = ($page - 1) * $itemsPerPage;  

// 数据库查询语句(伪代码)  
$query = "SELECT * FROM products LIMIT $offset, $itemsPerPage";  
?>  

3.3 表单数据传递

通过 GET 方法提交的表单数据会直接显示在 URL 中,适合无需隐私保护的场景,例如搜索框:

<!-- 搜索表单 -->  
<form action="search.php" method="get">  
    <input type="text" name="q" placeholder="搜索...">  
    <button type="submit">搜索</button>  
</form>  

四、$_GET 变量的局限性与安全风险

4.1 数据长度限制

HTTP 协议对 URL 的长度有限制,通常不超过 2000 字符。若传递大量数据(如文件内容),建议改用 POST 方法。

4.2 安全性隐患

4.2.1 URL 注入攻击

攻击者可能通过构造恶意参数执行 SQL 注入:

// 危险写法  
$id = $_GET['id'];  
$query = "SELECT * FROM users WHERE id = $id";  // 未过滤输入  

// 安全写法(使用预编译语句)  
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id");  
$stmt->execute(['id' => (int)$_GET['id']]);  

4.2.2 用户隐私泄露

敏感信息(如密码、身份证号)不应通过 GET 传递,应改用 POST 或 HTTPS。


五、$_GET 与其他数据传递方法的对比

方法传输方式数据可见性安全性最大长度限制
$_GETURL 查询参数可见较低约 2000 字符
$_POST请求体不可见较高无严格限制
$_COOKIEHTTP Cookie本地存储中等单 Cookie 4KB

选择建议

  • GET:适合非敏感、需分享的数据(如搜索、分页)。
  • POST:适合敏感或大量数据(如表单提交、文件上传)。

六、进阶技巧与最佳实践

6.1 参数过滤与验证

使用 filter_input() 函数进行类型转换和过滤:

// 获取并验证整数类型的 page 参数  
$page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT);  
if ($page === false) {  
    die("无效的页面参数");  
}  

6.2 默认值设置

通过 ?? 操作符提供默认值,避免空值错误:

$sort = $_GET['sort'] ?? 'date';  // 默认按日期排序  

6.3 URL 编码与解码

通过 urlencode()urldecode() 处理特殊字符:

// 生成安全的 URL  
$searchTerm = "PHP $_GET 变量";  
$safeUrl = "search.php?q=" . urlencode($searchTerm);  

// 解码参数  
$q = urldecode($_GET['q']);  

结论

$_GET 变量是 PHP 开发中不可或缺的工具,其简洁性与灵活性使其在 Web 应用中广泛使用。通过合理利用 $_GET,开发者可以快速实现动态页面、表单交互等核心功能。然而,必须警惕其安全风险,结合输入验证、数据过滤和 HTTPS 等措施,才能确保应用的安全性和稳定性。

对于初学者,建议从简单案例入手,逐步掌握 $_GET 的基本用法;中级开发者则应深入理解其工作原理,并结合其他技术(如预编译语句、中间件)构建更健壮的系统。掌握 PHP $_GET 变量 的精髓,将为 Web 开发之路奠定坚实基础。

最新发布