### [使用PHP的filter_input_array()函数过滤多个单个用户输入的数据](https://www.prosaas.cn/article/11511) **Published:** 2023-11-03T02:46:53 **Author:** 5201314 **Excerpt:** 在PHP开发中,往往需要处理用户的输入数据,而不可信的用户输入数据容易引发各种安全问题,如SQL注入、XSS攻… ![20231212160627739](https://zhiqipro.oss-cn-beijing.aliyuncs.com/2023/11/20231212160627739.jpg "20231212160627739") 在PHP开发中,往往需要处理用户的输入数据,而不可信的用户输入数据容易引发各种安全问题,如SQL注入、XSS攻击等。因此,在接收用户输入时,需要对数据进行过滤和验证,确保输入的数据符合要求,以提高系统的安全性。 PHP提供了filter\_input\_array()函数来过滤单个或多个用户输入数据。该函数可以通过使用过滤器来验证和过滤一组输入数据,从而提高输入数据的安全性。 本文将介绍如何使用PHP的filter\_input\_array()函数来过滤多个单个用户输入的数据,并且提供相应的代码示例。 一、filter\_input\_array()函数 filter\_input\_array()函数用于对多个输入数据进行验证和过滤。该函数的定义如下: filter\_input\_array ( int $type \[, mixed $definition \[, bool $add\_empty = true \]\] ) : mixed 该函数需要传入三个参数: 参数1:`type`,表示需要过滤的数据类型,可以是`INPUT_GET`、`INPUT_POST`、`INPUT_COOKIE`、`INPUT_SERVER`等,具体含义如下: - `INPUT_GET`:从`$_GET`中取得变量; - `INPUT_POST`:从`$_POST`中取得变量; - `INPUT_COOKIE`:从`$_COOKIE`中取得变量; - `INPUT_SERVER`:从`$_SERVER`中取得变量; - `INPUT_ENV`:从`$_ENV`中取得变量; - `INPUT_REQUEST`:从`$_REQUEST`中取得变量。 参数2:`definition`,表示输入数据的定义规则,可以使用一组规则数组来定义,具体格式如下: array( '变量名' => array( 'filter' => 指定的验证器, 'flags' => 可选的标记, 'options' => 可选的选项, 'name' => 为变量指定一个替代名称, ), '变量名2' => array( 'filter' => 指定的验证器2, 'flags' => 可选的标记, 'options' => 可选的选项, 'name' => 为变量指定一个替代名称2, ), //... ); 其中,`filter`表示指定的验证器,可以是内置的验证器如`FILTER_VALIDATE_EMAIL`、`FILTER_VALIDATE_INT`等,也可以是自定义的验证器,`flags`表示可选的标记,`options`表示可选的选项,`name`表示为变量指定一个替代名称。 参数3:`add_empty`,表示是否对空值进行过滤和验证。 该函数的返回值是过滤后的数据,如果发生错误则返回`false`。 二、使用filter\_input\_array()函数过滤多个单个用户输入的数据 下面我们给出一个使用filter\_input\_array()函数过滤多个单个用户输入的数据的示例。假设我们要验证并过滤一个包含用户名、邮箱和年龄的表单数据,满足以下要求: - 用户名只能包含字母和数字,且长度为6到12个字符 - 邮箱必须是合法的邮箱格式 - 年龄必须是数字,且在18到100之间 示例代码如下: array( 'filter' => FILTER\_VALIDATE\_REGEXP, 'options' => array('regexp' => '/^\[a-z0-9\_-\]{6,12}$/i'), 'name' => '用户名', ), 'email' => array( 'filter' => FILTER\_VALIDATE\_EMAIL, 'name' => '邮箱', ), 'age' => array( 'filter' => FILTER\_VALIDATE\_INT, 'options' => array('min\_range' => 18, 'max\_range' => 100), 'name' => '年龄', ), ); $input\_data = filter\_input\_array(INPUT\_POST, $definitions); if (!$input\_data) { echo '发生了一个错误。'; } else { if (in\_array(null, $input\_data, true) || in\_array(false, $input\_data, true)) { echo '输入数据不正确。'; } else { echo '输入数据正确。'; } } ?> 其中,我们定义了一个包含3个输入数据的数组,然后通过filter\_input\_array()函数对这些输入数据进行验证和过滤。在上面的示例中,我们使用了一些内置的验证器`FILTER_VALIDATE_REGEXP`、`FILTER_VALIDATE_EMAIL`和`FILTER_VALIDATE_INT`,它们分别用来验证输入数据是否符合正则表达式、是否符合邮箱格式、是否为整数。此外,使用了一些选项,如`min_range`、`max_range`,用于允许输入数据的最小值和最大值。最后,使用if语句判断输入数据是否合法。 三、结论 使用filter\_input\_array()函数可以方便地验证和过滤多个单个用户输入的数据,并提高数据的安全性。在使用该函数时,需要定义输入数据的规则、验证器、选项等,以确保输入数据的合法性。合理使用该函数,可以有效地保护系统的安全,避免常见的安全漏洞。 以上就是使用PHP的filter\_input\_array()函数过滤多个单个用户输入的数据的详细内容,更多请关注知企PROSAAS其它相关文章! **Tags:** Filter, if, php, sql, xss, 数据类型, 正则表达式 **Categories:** 后端开发 ---