gpt4 book ai didi

php - FILTER SANITIZE 与 FILTER VALIDATE,有什么区别 - 使用哪个?

转载 作者:可可西里 更新时间:2023-11-01 12:30:42 24 4
gpt4 key购买 nike

目前我正在用 PHP 制作一种类似于计算器的应用程序,并将表单作为输入方法。为了保护输入,我使用了 filter_input() 函数。作为过滤器,此函数采用两组元素之一:FILTER_SANITIZEFILTER_VALIDATE,我应该使用哪一个来过滤来自表单的输入?

$number1 = trim(filter_input(INPUT_GET, 'number1', FILTER_VALIDATE_FLOAT));

$number1 = trim(filter_input(INPUT_GET, 'number1', FILTER_SANITIZE_FLOAT));

最佳答案

这实际上取决于您的需求或适合您的应用程序。一个会验证它,然后说“是的,这是(或不是)一个有效的 float ”,而另一个会清除它的任何 Not Acceptable 值并返回它,如果原始输入有效或不是开始。

这同样适用于其他 FILTER_SANITIZE_*FILTER_VALIDATE_* 常量,但在此示例中,我们将按照原来的问题。

一起来看看吧!

$float = 0.032;
$not_float = "0.03b2";

var_dump(filter_var($float, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
var_dump(filter_var($not_float, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));

var_dump(filter_var($float, FILTER_VALIDATE_FLOAT));
var_dump(filter_var($not_float, FILTER_VALIDATE_FLOAT));

上述转储的返回将是

string(5) "0.032"  // $float          FILTER_SANITIZE_NUMBER_FLOAT
string(5) "0.032" // $not_float FILTER_SANITIZE_NUMBER_FLOAT
float(0.032) // $float FILTER_VALIDATE_FLOAT
bool(false) // $not_float FILTER_VALIDATE_FLOAT

FILTER_SANITIZE_NUMBER_FLOAT 将返回已清理值的字符串(PHP 不是强类型语言,因此 "0.032"== 0.032 ).
您还应该注意 FILTER_FLAG_ALLOW_FRACTION 标志,它保留小数点(如果没有该标志,它将返回 0032)。

如您所见,如果不是有效的 float ,任何 FILTER_VALIDATE_FLOAT 都会返回 bool 值 false,如果有效则返回实际的浮点值(这是一个“真实”的值(value))。请记住,0.00 将是一个“虚假”值,因此如果您希望检查验证是否失败,您应该使用严格比较,以防输入为零, 但仍然有效。

if (filter_var($input, FILTER_VALIDATE_FLOAT) === false) {
// Oh noes! $input wasn't a valid float!
}

您可以在这个 live demo 中亲自查看.

总结
如果你想在计算中使用它,你可能想要验证它,并让用户知道它的格式无效,但你可以清理它,并无论如何使用它.

其他过滤器
这里的示例显示了 FILTER_SANITIZE_FLOAT 的用法,但还有其他验证和判断过滤器。有关完整说明,请参阅以下链接。

关于php - FILTER SANITIZE 与 FILTER VALIDATE,有什么区别 - 使用哪个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44445913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com