filter_var和filter_input之间的区别

4
为什么这个不起作用:
if(!($data['email'] = filter_var(INPUT_POST,'email',FILTER_SANITIZE_EMAIL)))
{
    $errors['email'] = 'Invalid Email.';
}

这是有效的:

if(!($data['email'] = filter_input(INPUT_POST,'email',FILTER_SANITIZE_EMAIL)))
{
    $errors['email'] = 'Invalid Email.';
}

这里的区别在于filter_varfilter_input,当我使用filter_var提交时,表单不会被提交,但使用filter_input则可以成功提交。
filter_input(INPUT_POST,'email',FILTER_SANITIZE_EMAIL))

如果我写了例如 some'@email.com 为什么不会去掉 ' 呢?这个函数有用吗?我有点困惑。

区别在于filter_input()如果数组索引不存在,不会抛出通知错误。 - Daan
1个回答

4

如果您查看filter_varfilter_input函数所接受的参数,您就会明白为什么:

filter_var ($value_to_be_filtered, FILTER_TYPE, $options)

VS

filter_input($input_type , $variable_from_input, FILTER_TYPE, $options)

其中$input_typeINPUT_GETINPUT_POSTINPUT_COOKIEINPUT_SERVERINPUT_ENV之一。


谢谢您的回答。那么FILTER_SANITIZE_EMAIL为什么不能清理电子邮件呢? - user5035451
@Stan 不客气!你是指在 filter_var 中吗?那么正确的语法应该是 filter_var ($_POST['email'], FILTER_SANITIZE_EMAIL) - Muhammet
我是指在filter_input函数中。FILTER_SANITIZE_EMAIL无法从电子邮件中删除非法字符。 - user5035451
@Stan FILTER_SANITIZE_EMAIL 允许 ' 字符,可以在这里查看 http://php.net/manual/en/filter.filters.sanitize.php。 - Muhammet
太小了...我没看到。对此很抱歉,再次感谢您提供的信息! - user5035451

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