PHP过滤器,如何过滤输入数组

Posted

技术标签:

【中文标题】PHP过滤器,如何过滤输入数组【英文标题】:PHP Filter, how to filter input array 【发布时间】:2011-02-15 04:42:06 【问题描述】:

我正在使用 php 过滤器对表单数据进行基本的清理和验证。

我遇到的主要问题是我标记了我的表单,以便所有数据都在一个数组中用于 POST 输入。例如表单字段、页面[名称]、页面[slug]、页面[正文]、页面[状态]等

使用以下内容:

filter_input(INPUT_POST, 'page[name]', FILTER_SANITIZE_STRING);
OR
filter_input(INPUT_POST, "page['name']", FILTER_SANITIZE_STRING);

我无法访问该变量。有人可以告诉我使用 filter_input() 访问数组数据的正确名称

【问题讨论】:

顺便说一句,我在谷歌上疯狂搜索,却一无所获。 你确定变量在清理之前有值吗? @anthony 是的,它确实有一个值,如果我以名称发送它就可以了。只是不确定使用此过滤器方法访问数组键的符号。 当时并不容易,PHP需要让filter_input_array递归……目前这种情况下直接访问$_POST还是容易很多的。 【参考方案1】:

怎么样

$_POST['page'] = filter_var_array($_POST['page'], FILTER_SANITIZE_STRING);

【讨论】:

【参考方案2】:

我不认为您可以访问单个值(根据需要轻松访问),但是您可以过滤 page 数组并获得所需的值。

$page = filter_input(INPUT_POST, 'page', FILTER_SANITIZE_STRING, FILTER_REQUIRE_ARRAY);
if (array_key_exists('name', $page)) 
    $name = $page['name'];

或者,如果您对失去使用原始输入的能力感到满意,那么您可以使用:

if (isset($_POST['page']['name'])) 
    $name = filter_var($_POST['page']['name'], FILTER_SANITIZE_STRING);

然而,两者都很丑。

【讨论】:

是的,两个都超级丑。我不妨将表单切换为单个 var 名称,并避免该问题。不支持的耻辱。 当然。在您的情况下,使用单个名称(对于过滤器扩展)更方便;不幸的是。 请查看@Fletcher Moore 的回答。非常优雅和有效!

以上是关于PHP过滤器,如何过滤输入数组的主要内容,如果未能解决你的问题,请参考以下文章

php数组的重复值如何过滤掉

php强大的filter过滤用户输入

如何使用 MySQL 表过滤 php 数组?

如何让 vuejs 过滤器为数组内的嵌套项工作?

PHP:如何使用 array_filter() 过滤数组键?

如何根据 Javascript 中的用户输入过滤数组?