$_POST是超全局数组而非函数,用于接收POST表单数据;需确保form method="post"且字段有name属性,用$_POST['key'] ?? ''安全获取并htmlspecialchars()转义防XSS。

PHP 8.1 中没有 $\_POST 函数,$_POST 是一个**超全局数组(superglobal array)**,不是函数。它用于接收通过 HTTP POST 方法提交的表单数据。
如何正确使用 $_POST 获取表单数据
确保 HTML 表单的 method 属性为 "post",且 action 指向处理该请求的 PHP 文件:
<form method="post" action="handle.php">
<input type="text" name="username">
<input type="submit" value="提交">
</form>
在 handle.php 中,用 $_POST['username'] 获取输入值:
立即学习“PHP免费学习笔记(深入)”;
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = $_POST['username'] ?? ''; // PHP 7.0+ 空合并操作符,防未定义索引
echo htmlspecialchars($username); // 输出前务必转义,防 XSS
}
?>
安全获取数据的关键做法
- 始终检查键是否存在,避免“Undefined index”警告:用
$_POST['key'] ?? ''或isset($_POST['key']) - 对输出到 HTML 的数据调用
htmlspecialchars(),防止跨站脚本攻击(XSS) - 对需要入库的数据,使用 PDO 预处理语句或 MySQLi 参数化查询,防止 SQL 注入
- 不要直接打印或执行
$_POST中的原始内容(如eval($_POST['code'])),极不安全
常见问题排查
-
获取不到数据?检查表单
method="post"、字段是否有name属性(name值即为$_POST的键名) -
中文乱码?确保 HTML 页面声明 UTF-8:
<meta charset="UTF-8">,且 PHP 文件本身保存为 UTF-8 编码 -
数组型字段?如
<input name="hobbies[]">,$_POST['hobbies']会是数组,可直接遍历
替代方案与补充说明
如果表单同时包含 GET 和 POST 数据,也可用 $_REQUEST(但不推荐,因来源不明确,不利于安全控制);上传文件需配合 $_FILES 数组使用,$_POST 不包含文件内容。



















