企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
从PHP 5.2.0开始默认启用过滤器扩展 该扩展程序通过验证或清除数据来过滤数据。当数据源包含未知(或外部)数据(例如用户提供的输入)时,此功能特别有用。例如,此数据可能来自HTML表单。 过滤有两种主要类型: **净化过滤器**(Sanitization)和**验证过滤器**(Validation)两种 >[info][验证过滤器](https://www.php.net/manual/en/filter.filters.validate.php)用于验证或检查数据是否符合某些条件。例如,传入 **`FILTER_VALIDATE_EMAIL`** 将确定数据是否为有效的电子邮件地址,但不会更改数据本身。 [清理过滤器](https://www.php.net/manual/en/filter.filters.sanitize.php)将对数据进行[清理](https://www.php.net/manual/en/filter.filters.sanitize.php),因此可以通过删除不需要的字符来更改数据。例如,传 **`FILTER_SANITIZE_EMAIL`** 将删除不适合包含电子邮件地址的字符。也就是说,它不会验证数据。 可以选择将**flags**与**验证和净化功能**结合使用,以根据需要调整行为。例如,传入 **`FILTER_FLAG_PATH_REQUIRED`** 同时过滤的URL将需要的路径(像*/ FOO*中*http://example.org/foo*)存在。 ## **验证过滤器** | ID | Name | Options | Flags | 描述 | | --- | --- | --- | --- | --- | | **`FILTER_VALIDATE_BOOLEAN`** | "boolean" | `default` | **`FILTER_NULL_ON_FAILURE`** | "1", "true", "on" 和 "yes"返回`TRUE`. 其他返回`FALSE`.<br>如果设置了`FILTER_NULL_ON_FAILURE`,仅"0", "false", "off", "no",和 ""返回`FALSE`, 其他非bool的值返回`NULL`.| | **`FILTER_VALIDATE_DOMAIN`** | "validate_domain" | `default` | **`FILTER_FLAG_HOSTNAME`** | 验证域名标签长度是否有效.| | **`FILTER_VALIDATE_EMAIL`** | "validate_email" | `default` | **`FILTER_FLAG_EMAIL_UNICODE`** |验证值是否为有效的电子邮件地址| | **`FILTER_VALIDATE_FLOAT`** | "float" | `default`,`decimal`,`min_range`,`max_range` | **`FILTER_FLAG_ALLOW_THOUSAND`** | 验证值是否为float,可以选择从指定范围进行验证,并在成功时转换为float. | | **`FILTER_VALIDATE_INT`** | "int" | `default`,`min_range`,`max_range` | **`FILTER_FLAG_ALLOW_OCTAL`**,**`FILTER_FLAG_ALLOW_HEX`** | 将值验证为整数(可以选择从指定范围开始),并在成功时转换为int. | | **`FILTER_VALIDATE_IP`** | "validate_ip" | `default` | **`FILTER_FLAG_IPV4`**,**`FILTER_FLAG_IPV6`**,**`FILTER_FLAG_NO_PRIV_RANGE`**,**`FILTER_FLAG_NO_RES_RANGE`** | 验证值是否为IP地址,可以是仅IPv4或IPv6,也可以不是私有或保留范围中的值. | | **`FILTER_VALIDATE_MAC`** | "validate_mac_address" | `default` |   | 验证MAC地址. | | **`FILTER_VALIDATE_REGEXP`** | "validate\_regexp" | `default`,`regexp` |   | 根据regexp与 Perl兼容的正则表达式验证值. | | **`FILTER_VALIDATE_URL`** | "validate_url" | `default` | **`FILTER_FLAG_SCHEME_REQUIRED`**,**`FILTER_FLAG_HOST_REQUIRED`**,**`FILTER_FLAG_PATH_REQUIRED`**,**`FILTER_FLAG_QUERY_REQUIRED`** | 验证值是否为URL. | ## **净化过滤器** | ID | Name | Flags | 描述 | | --- | --- | --- | --- | | **`FILTER_SANITIZE_EMAIL`** | "email" |   | 除去字母,数字和*!#$%&'\*+-=?^\_`{\|}~@.\[\]*以外的所有字符。 | | **`FILTER_SANITIZE_ENCODED`** | "encoded" | **`FILTER_FLAG_STRIP_LOW`**,**`FILTER_FLAG_STRIP_HIGH`**,**`FILTER_FLAG_STRIP_BACKTICK`**,**`FILTER_FLAG_ENCODE_LOW`**,**`FILTER_FLAG_ENCODE_HIGH`** | URL编码字符串,可以选择**去除**或者**编码**特殊字符。 | | **`FILTER_SANITIZE_MAGIC_QUOTES`** |"magic_quotes" |   | 应用[addslashes()](https://www.php.net/manual/en/function.addslashes.php)转义\\"NULL'字符。 | | **`FILTER_SANITIZE_NUMBER_FLOAT`** |"number_float" | **`FILTER_FLAG_ALLOW_FRACTION`**,**`FILTER_FLAG_ALLOW_THOUSAND`**,**`FILTER_FLAG_ALLOW_SCIENTIFIC`** | 删除除数字,*+-*和可选的*。,eE*之外的所有字符。 | | **`FILTER_SANITIZE_NUMBER_INT`** | “ number\_int” |   | 删除除数字,加号和减号之外的所有字符。 | | **`FILTER_SANITIZE_SPECIAL_CHARS`** | “特殊字符” | **`FILTER_FLAG_STRIP_LOW`**,**`FILTER_FLAG_STRIP_HIGH`**,**`FILTER_FLAG_STRIP_BACKTICK`**,**`FILTER_FLAG_ENCODE_HIGH`** | HTML转义符*'“ <>&*和ASCII值小于32的字符,可以选择剥离或编码其他特殊字符。 | | **`FILTER_SANITIZE_FULL_SPECIAL_CHARS`** | “ full\_special\_chars” | **`FILTER_FLAG_NO_ENCODE_QUOTES`**, | 等效于调用带有set的[htmlspecialchars()](https://www.php.net/manual/en/function.htmlspecialchars.php)**`ENT_QUOTES`**。可以通过设置禁用引号**`FILTER_FLAG_NO_ENCODE_QUOTES`**。像[htmlspecialchars()](https://www.php.net/manual/en/function.htmlspecialchars.php)一样,此过滤器也知道[default\_charset,](https://www.php.net/manual/en/ini.core.php#ini.default-charset)并且如果检测到由当前字符集中的无效字符组成的字节序列,则整个字符串将被拒绝,从而导致长度为0的字符串。将此过滤器用作默认过滤器时,请参阅以下有关将默认标志设置为0的警告。 | | **`FILTER_SANITIZE_STRING`** | “串” | **`FILTER_FLAG_NO_ENCODE_QUOTES`**,**`FILTER_FLAG_STRIP_LOW`**,**`FILTER_FLAG_STRIP_HIGH`**,**`FILTER_FLAG_STRIP_BACKTICK`**,**`FILTER_FLAG_ENCODE_LOW`**,**`FILTER_FLAG_ENCODE_HIGH`**,**`FILTER_FLAG_ENCODE_AMP`** | 剥离标签,可选择剥离或编码特殊字符。 | | **`FILTER_SANITIZE_STRIPPED`** | “剥离” |   | “字符串”过滤器的别名。 | | **`FILTER_SANITIZE_URL`** | “网址” |   | 除去字母,数字和*$ -\_。+!\*'(),{} | \\\\ ^〜\[\]`<>#%“; /?:@&=*以外的所有字符。 | | **`FILTER_UNSAFE_RAW`** | “ unsafe\_raw” | **`FILTER_FLAG_STRIP_LOW`**,**`FILTER_FLAG_STRIP_HIGH`**,**`FILTER_FLAG_STRIP_BACKTICK`**,**`FILTER_FLAG_ENCODE_LOW`**,**`FILTER_FLAG_ENCODE_HIGH`**,**`FILTER_FLAG_ENCODE_AMP`** | 不执行任何操作,可以选择去除或编码特殊字符。此过滤器也别名为**`FILTER_DEFAULT`**。 | ``` $email = "dash@163.com"; //Note the .com added //$email = "dash@163"; //false 走else{}分支 echo "PHP Version: ".phpversion().'<br>'; if(filter_var($email, FILTER_VALIDATE_EMAIL)){ echo $email.'<br>'; var_dump(filter_var($email, FILTER_VALIDATE_EMAIL)); }else{ var_dump(filter_var($email, FILTER_VALIDATE_EMAIL)); } ```