php参数传递验证需先检查类型、范围、格式和必要性再执行业务逻辑;用isset()判存在、!empty()判非空、filter_var()校验格式、白名单限制可选值、封装规则批量验证。

PHP参数传递验证的核心是:**接收参数后立即检查类型、范围、格式和必要性,再进入业务逻辑**。不验证直接使用,轻则报错,重则被注入或执行异常操作。
基础参数存在性和非空验证
用 isset() 和 empty() 区分场景:
-
isset($_GET['id'])判断参数是否传入(包括值为0、"0"、false都算存在) -
!empty($_GET['name'])判断是否“有实际内容”(排除null、""、0、"0"、false、[]) - 若参数必须存在且不能为“假值”,建议组合:
isset($_GET['email']) && trim($_GET['email']) !== ''
类型与格式校验(推荐 filter_var)
避免手动正则或强转,用 PHP 内置 filter_var() 更安全可靠:
- 整数:
filter_var($_GET['page'], FILTER_VALIDATE_INT, ['options' => ['min_range' => 1]]) - 邮箱:
filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) - URL:
filter_var($_POST['url'], FILTER_VALIDATE_URL) - 去除首尾空格并转义 HTML(输出前):
htmlspecialchars(trim($_POST['content']), ENT_QUOTES, 'UTF-8')
白名单机制控制可选值
对下拉、状态、动作类参数(如 status=active),绝不信任客户端传来的任意字符串:
- 定义允许值数组:
$allowed_actions = ['save', 'delete', 'publish']; - 严格校验:
in_array($_GET['action'], $allowed_actions, true)(注意加true启用严格比较) - 不匹配时直接拒绝:
if (!in_array(...)) { die('Invalid action'); }或抛出异常
批量验证与封装建议
多个参数时,别写一长串 if,可封装简单验证器:
$rules = [
'id' => ['required' => true, 'type' => 'int', 'min' => 1],
'email' => ['required' => true, 'type' => 'email'],
'role' => ['required' => false, 'in' => ['user', 'admin', 'editor']]
];
$result = validateInput($_GET, $rules);
if ($result['error']) {
die($result['message']);
}
$data = $result['data']; // 已过滤/转换后的安全数据
这种结构清晰、易维护,也方便后续接入更成熟的验证库(如 Respect\Validation 或 Symfony Validator)。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











