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

18

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

我的主要问题是,我将表单标记为一个数组,以便所有数据都在POST输入中。例如,表单字段,page[name],page[slug],page[body],page[status]等。

使用以下代码:

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

我无法访问变量。请问使用filter_input()访问数组数据的正确名称是什么?


顺便说一句,我在谷歌上疯狂搜索了很久,但什么都没找到。 - user137621
你确定在进行清理操作之前该变量已经有值了吗? - Anthony Forloney
@anthony 是的,它确实有一个值,如果我将其作为名称发送,那就没问题了。只是不确定使用此过滤器方法访问数组键的符号。 - user137621
在目前情况下,直接访问 $_POST 仍然更容易。但是,PHP 需要使 filter_input_array 递归才能更好地处理数据。 - Jorge Orpinel Pérez
2个回答

16

我认为你不能轻易地访问单个值,但是你可以过滤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);
}

不过,两者都相当难看。


是的,两者都非常丑陋。我可能会改成单个变量名的形式来避免这个问题。可惜不支持这种方式。 - user137621
当然。在你的情况下,单个名称更方便(对于过滤器扩展)进行操作;不幸的是。 - salathe
请检查 @Fletcher Moore 的答案。非常优雅且有效! - patrick

8
如何呢?
$_POST['page'] = filter_var_array($_POST['page'], FILTER_SANITIZE_STRING);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接