$_get 是 php 超全局关联数组,仅自动填充 url 查询字符串(? 后键值对),与请求方法无关;直接访问需先 isset 校验、filter_var 过滤、htmlspecialchars 转义,避免 xss、sql 注入等风险。

$_GET 是 PHP 的超全局数组变量
它不是“某个变量”,而是 PHP 自动填充的关联数组,用来接收 URL 查询字符串(query string)里的键值对。比如访问 https://example.com/page.php?name=alice&age=30,PHP 就会把 name 和 age 自动存进 $_GET 里,你可以直接用 $_GET['name'] 拿到 'alice'。
$_GET 只读、只含 URL 参数,不包含表单 POST 数据
常见误解是以为表单 method="get" 提交的东西“变成”了 $_GET —— 实际上它只是触发浏览器拼出带查询参数的 URL,最终仍是靠 URL 本身驱动 $_GET 填充。所以:
-
$_GET里永远只有 URL 中?后面的部分,和请求方法无关 -
$_POST和$_GET完全独立,哪怕同名参数也互不影响 - 如果 URL 没有查询参数(如
/page.php),$_GET就是空数组[],不是null或未定义
直接读取 $_GET['key'] 很危险,必须校验
因为 $_GET 内容完全由用户控制,不校验就直接用于 SQL 查询、文件路径拼接或输出到 HTML,几乎必然导致漏洞:
- 没检查键是否存在?
$_GET['id']可能根本不存在,触发 Notice 错误;应先用isset($_GET['id'])或filter_input(INPUT_GET, 'id') - 没过滤类型?
$_GET['id']看似是数字,但可能是'1 OR 1=1';要用filter_var($_GET['id'], FILTER_VALIDATE_INT)或强转(int)$_GET['id'] - 没转义就输出?
echo $_GET['q']可能执行 XSS;必须用htmlspecialchars($_GET['q'])
$_GET 最大长度受 Web 服务器限制,不是 PHP 配置
PHP 本身不限制 $_GET 大小,但 Apache、Nginx 或浏览器都有默认上限(通常 2KB–8KB)。超过后可能:
- URL 被截断,部分参数丢失
- 服务器直接返回 414 Request-URI Too Long
- 某些代理或 CDN 拒绝转发长 URL
如果需要传大量数据,别硬塞 $_GET,改用 $_POST 或 API body 传输。
真正麻烦的从来不是“怎么读 $_GET”,而是忘记它每一项都来自不可信源头,且生命周期和语义都和其他变量完全不同。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











