FILTER_SANITIZE 与 FILTER VALIDATE,有何区别 - 以及使用哪个?
FILTER_SANITIZE vs FILTER VALIDATE, whats the difference - and which to use?
目前,我正在 PHP 中制作类似计算器的应用程序,并将表单作为输入方法。为了保护输入,我正在使用 filter_input()
函数。作为过滤器,此函数采用两组元素之一:FILTER_SANITIZE
和 FILTER_VALIDATE
,我应该使用哪一个来过滤来自表单的输入?
$number1 = trim(filter_input(INPUT_GET, 'number1', FILTER_VALIDATE_FLOAT));
或
$number1 = trim(filter_input(INPUT_GET, 'number1', FILTER_SANITIZE_FLOAT));
这取决于您的需要或适合您的应用程序,真的。一个会验证它,然后说 "Yes, this is (or isn't) a valid float",而另一个会清除任何不可接受的值和 return,并且如果原始输入有效或无效则什么都不说。
这同样适用于其他 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));
上述转储中的 return 将是
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
会 return 净化值的 字符串 (PHP 不是强类型语言,所以 "0.032" == 0.032
).
您还应该注意 FILTER_FLAG_ALLOW_FRACTION
标志,它保留小数点(如果没有该标志,它将 return 0032
)。
如您所见,任何 FILTER_VALIDATE_FLOAT
如果不是有效的浮点数,则 return 将是布尔值 false
,如果有效,则为实际的浮点值(即"truthy" 值)。请记住 0.00
将是一个 "falsy" 值,因此如果您希望检查验证是否 失败 ,您应该使用严格比较,以防输入为零,但仍然有效。
if (filter_var($input, FILTER_VALIDATE_FLOAT) === false) {
// Oh noes! $input wasn't a valid float!
}
你可以在这个live demo.
中自己看看
总结
如果你想在计算中使用它,你可能想要验证它,让用户知道它的格式无效,但你可以清理并使用它。
其他过滤器
这里的示例显示了 FILTER_SANITIZE_FLOAT
的用法,但还有其他验证和注释过滤器。有关完整说明,请参阅以下链接。
目前,我正在 PHP 中制作类似计算器的应用程序,并将表单作为输入方法。为了保护输入,我正在使用 filter_input()
函数。作为过滤器,此函数采用两组元素之一:FILTER_SANITIZE
和 FILTER_VALIDATE
,我应该使用哪一个来过滤来自表单的输入?
$number1 = trim(filter_input(INPUT_GET, 'number1', FILTER_VALIDATE_FLOAT));
或
$number1 = trim(filter_input(INPUT_GET, 'number1', FILTER_SANITIZE_FLOAT));
这取决于您的需要或适合您的应用程序,真的。一个会验证它,然后说 "Yes, this is (or isn't) a valid float",而另一个会清除任何不可接受的值和 return,并且如果原始输入有效或无效则什么都不说。
这同样适用于其他 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));
上述转储中的 return 将是
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
会 return 净化值的 字符串 (PHP 不是强类型语言,所以 "0.032" == 0.032
).
您还应该注意 FILTER_FLAG_ALLOW_FRACTION
标志,它保留小数点(如果没有该标志,它将 return 0032
)。
如您所见,任何 FILTER_VALIDATE_FLOAT
如果不是有效的浮点数,则 return 将是布尔值 false
,如果有效,则为实际的浮点值(即"truthy" 值)。请记住 0.00
将是一个 "falsy" 值,因此如果您希望检查验证是否 失败 ,您应该使用严格比较,以防输入为零,但仍然有效。
if (filter_var($input, FILTER_VALIDATE_FLOAT) === false) {
// Oh noes! $input wasn't a valid float!
}
你可以在这个live demo.
中自己看看总结
如果你想在计算中使用它,你可能想要验证它,让用户知道它的格式无效,但你可以清理并使用它。
其他过滤器
这里的示例显示了 FILTER_SANITIZE_FLOAT
的用法,但还有其他验证和注释过滤器。有关完整说明,请参阅以下链接。