PHP Filter 函数
在 PHP 中,`filter_*` 系列函数主要用于验证和过滤数据。这些函数提供了一种标准化的方式来处理输入数据,确保它们符合预期的格式或类型。以下是一些常用的 `filter_*` 函数及其用途:
### 1. `filter_var()`
`filter_var()` 是最常用的过滤函数之一,用于对单个变量进行过滤或验证。
#### 常见用法:
```php
// 验证电子邮件地址
$email = "example@example.com";
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Email is valid.";
} else {
echo "Email is not valid.";
}
// 过滤整数
$int = filter_var("123", FILTER_VALIDATE_INT);
echo $int; // 输出: 123
// 过滤 URL
$url = "http://www.example.com";
$safe_url = filter_var($url, FILTER_SANITIZE_URL);
echo $safe_url; // 输出: http://www.example.com
```
#### 常见过滤器:
- `FILTER_VALIDATE_EMAIL`: 验证电子邮件地址。
- `FILTER_VALIDATE_URL`: 验证 URL。
- `FILTER_VALIDATE_IP`: 验证 IP 地址。
- `FILTER_SANITIZE_NUMBER_INT`: 去除非数字字符。
- `FILTER_SANITIZE_STRING`: 去除非法字符(如 HTML 标签)。
- `FILTER_SANITIZE_URL`: 去除 URL 中的非法字符。
---
### 2. `filter_input()`
`filter_input()` 用于从外部来源(如 GET、POST 或 COOKIE)获取并过滤数据。
#### 常见用法:
```php
// 获取 POST 数据并验证其为整数
$input = filter_input(INPUT_POST, \'age\', FILTER_VALIDATE_INT);
if ($input !== false) {
echo "Age is valid: " . $input;
} else {
echo "Invalid age.";
}
// 获取 GET 参数并清理字符串
$name = filter_input(INPUT_GET, \'name\', FILTER_SANITIZE_STRING);
echo $name;
```
#### 参数说明:
- 第一个参数:数据来源(如 `INPUT_GET`, `INPUT_POST`, `INPUT_COOKIE` 等)。
- 第二个参数:变量名。
- 第三个参数:过滤器或选项。
---
### 3. `filter_has_var()`
`filter_has_var()` 用于检查是否存在指定的外部变量(如 GET、POST 或 COOKIE)。
#### 示例:
```php
if (filter_has_var(INPUT_POST, \'username\')) {
echo "Username exists in POST data.";
} else {
echo "No username found.";
}
```
---
### 4. `filter_input_array()`
`filter_input_array()` 用于一次性从外部来源获取并过滤多个变量。
#### 示例:
```php
$data = [
\'name\' => FILTER_SANITIZE_STRING,
\'age\' => [\'filter\' => FILTER_VALIDATE_INT, \'options\' => [\'min_range\' => 18, \'max_range\' => 99]],
];
$_POST[\'name\'] = "<script>alert(\'XSS\');</script>";
$_POST[\'age\'] = "25";
$filtered_data = filter_input_array(INPUT_POST, $data);
print_r($filtered_data);
```
输出结果:
```php
Array
(
[name] => alert(\'XSS\');
[age] => 25
)
```
---
### 5. `filter_var_array()`
`filter_var_array()` 类似于 `filter_input_array()`,但它是从数组中获取数据并进行过滤。
#### 示例:
```php
$data = [
\'email\' => \'example@example.com\',
\'age\' => \'25\',
];
$filters = [
\'email\' => FILTER_VALIDATE_EMAIL,
\'age\' => [\'filter\' => FILTER_VALIDATE_INT, \'options\' => [\'min_range\' => 18, \'max_range\' => 99]],
];
$filtered_data = filter_var_array($data, $filters);
print_r($filtered_data);
```
输出结果:
```php
Array
(
[email] => example@example.com
[age] => 25
)
```
---
### 总结
- **`filter_var()`**:用于单个变量的过滤。
- **`filter_input()`**:用于从外部来源获取并过滤变量。
- **`filter_input_array()`**:批量处理来自外部来源的数据。
- **`filter_var_array()`**:批量处理数组中的数据。
通过使用这些函数,可以有效地提高代码的安全性和健壮性,避免因输入数据不合法而导致的问题。