企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
# Filter扩展 从PHP 5.2.0开始默认启用过滤器扩展 该扩展程序通过验证或清除数据来过滤数据。当数据源包含未知(或外部)数据(例如用户提供的输入)时,此功能特别有用。例如,此数据可能来自HTML表单。 过滤有两种主要类型: **净化过滤器**(Sanitization)和**验证过滤器**(Validation)两种 > [验证过滤器](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\*)存在。](http://example.org/foo*%EF%BC%89%E5%AD%98%E5%9C%A8%E3%80%82) ## **验证过滤器** IDNameOptionsFlags描述**`FILTER_VALIDATE_BOOLEAN`**"boolean"`default`**`FILTER_NULL_ON_FAILURE`**"1", "true", "on" 和 "yes"返回`TRUE`. 其他返回`FALSE`. 如果设置了`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.## **净化过滤器** IDNameFlags描述**`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`\*\*。``` <pre class="calibre17">``` $email <span class="token1">=</span> <span class="token2">"dash@163.com"</span><span class="token3">;</span> <span class="token">//Note the .com added</span> <span class="token">//$email = "dash@163"; //false 走else{}分支</span> echo <span class="token2">"PHP Version: "</span><span class="token3">.</span><span class="token4">phpversion</span><span class="token3">(</span><span class="token3">)</span><span class="token3">.</span><span class="token2">'<br>'</span><span class="token3">;</span> <span class="token5">if</span><span class="token3">(</span><span class="token4">filter_var</span><span class="token3">(</span>$email<span class="token3">,</span> FILTER_VALIDATE_EMAIL<span class="token3">)</span><span class="token3">)</span><span class="token3">{</span> echo $email<span class="token3">.</span><span class="token2">'<br>'</span><span class="token3">;</span> <span class="token4">var_dump</span><span class="token3">(</span><span class="token4">filter_var</span><span class="token3">(</span>$email<span class="token3">,</span> FILTER_VALIDATE_EMAIL<span class="token3">)</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span><span class="token5">else</span><span class="token3">{</span> <span class="token4">var_dump</span><span class="token3">(</span><span class="token4">filter_var</span><span class="token3">(</span>$email<span class="token3">,</span> FILTER_VALIDATE_EMAIL<span class="token3">)</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> ``` ```