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()`**:批量处理数组中的数据。 通过使用这些函数,可以有效地提高代码的安全性和健壮性,避免因输入数据不合法而导致的问题。