filter_id() 函数返回指定过滤器名称对应的过滤器ID。
过滤器ID是一个整数值,可以在其他过滤函数中代替过滤器名称使用。
filter_id(string $filtername): int|false
| 参数 | 描述 |
|---|---|
$filtername |
过滤器名称的字符串(不包含"FILTER_"前缀) 例如:对于 FILTER_VALIDATE_EMAIL,只需传递 "validate_email" 或 "VALIDATE_EMAIL" |
false| 过滤器名称 | 过滤器常量 | filter_id() 参数示例 | 返回的ID |
|---|---|---|---|
| 验证布尔值 | FILTER_VALIDATE_BOOLEAN |
"validate_boolean" |
258 |
| 验证邮件地址 | FILTER_VALIDATE_EMAIL |
"validate_email" |
274 |
| 验证浮点数 | FILTER_VALIDATE_FLOAT |
"validate_float" |
259 |
| 验证整数 | FILTER_VALIDATE_INT |
"validate_int" |
257 |
| 验证IP地址 | FILTER_VALIDATE_IP |
"validate_ip" |
275 |
| 验证URL | FILTER_VALIDATE_URL |
"validate_url" |
273 |
| 去除标签 | FILTER_SANITIZE_STRING |
"sanitize_string" |
513 |
| 去除特殊字符 | FILTER_SANITIZE_SPECIAL_CHARS |
"sanitize_special_chars" |
515 |
| 去除邮件非法字符 | FILTER_SANITIZE_EMAIL |
"sanitize_email" |
517 |
| 去除URL非法字符 | FILTER_SANITIZE_URL |
"sanitize_url" |
518 |
<?php
// 获取各种过滤器的ID
echo "FILTER_VALIDATE_EMAIL ID: " . filter_id("validate_email") . "<br>";
echo "FILTER_VALIDATE_INT ID: " . filter_id("validate_int") . "<br>";
echo "FILTER_VALIDATE_URL ID: " . filter_id("validate_url") . "<br>";
echo "FILTER_SANITIZE_STRING ID: " . filter_id("sanitize_string") . "<br>";
echo "FILTER_SANITIZE_EMAIL ID: " . filter_id("sanitize_email") . "<br>";
?>
<?php
// 根据用户输入动态选择过滤器
$filterType = "email"; // 可以从表单获取
$userInput = "test@example.com";
// 动态构建过滤器名称
$filterName = "validate_" . $filterType;
$filterId = filter_id($filterName);
if ($filterId !== false) {
$result = filter_var($userInput, $filterId);
if ($result !== false) {
echo "验证成功: " . htmlspecialchars($result);
} else {
echo "验证失败";
}
} else {
echo "无效的过滤器类型";
}
?>
<?php
// 检查过滤器是否存在
$filtersToCheck = ["validate_email", "validate_ip", "validate_float", "invalid_filter"];
foreach ($filtersToCheck as $filter) {
$filterId = filter_id($filter);
if ($filterId !== false) {
echo "过滤器 '$filter' 存在,ID: $filterId<br>";
} else {
echo "过滤器 '$filter' 不存在<br>";
}
}
?>
<?php
$email = "user@example.com";
// 方法1:使用过滤器常量名称
$result1 = filter_var($email, FILTER_VALIDATE_EMAIL);
// 方法2:使用过滤器ID
$filterId = filter_id("validate_email");
$result2 = filter_var($email, $filterId);
echo "使用常量名称验证结果: " . ($result1 !== false ? "有效" : "无效") . "<br>";
echo "使用filter_id()获取ID验证结果: " . ($result2 !== false ? "有效" : "无效") . "<br>";
echo "两种方法结果是否相同: " . ($result1 == $result2 ? "是" : "否") . "<br>";
?>
<?php
// 创建动态过滤器配置
$filters = [
'email' => filter_id('validate_email'),
'age' => filter_id('validate_int'),
'url' => filter_id('validate_url'),
'name' => filter_id('sanitize_string')
];
$data = [
'email' => 'test@example.com',
'age' => '25',
'url' => 'https://www.example.com',
'name' => '<script>alert("xss")</script>John'
];
foreach ($data as $key => $value) {
if (isset($filters[$key])) {
$filtered = filter_var($value, $filters[$key]);
echo "$key: " . htmlspecialchars($filtered) . "<br>";
}
}
?>
filter_id() 函数参数不区分大小写:filter_id("validate_email") 和 filter_id("VALIDATE_EMAIL") 返回相同结果false,确保过滤器存在| 场景 | 使用常量 | 使用filter_id() |
|---|---|---|
| 代码可读性 | 高(常量名称直观) | 中(需要知道字符串参数) |
| 性能 | 高(直接使用常量) | 中(需要函数调用) |
| 动态性 | 低(静态) | 高(可动态生成) |
| 错误检查 | 直接 | 需要检查返回值 |
该函数是 PHP 后端函数,与浏览器无关。