【问题标题】:FILTER_SANITIZE vs FILTER VALIDATE, whats the difference - and which to use?FILTER SANITIZE vs FILTER VALIDATE,有什么区别 - 使用哪个?
【发布时间】:2017-06-08 21:32:20
【问题描述】:

目前我正在用 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));

【问题讨论】:

  • 嗯,你想验证还是清理它?
  • 我想计算数据,我确信它是一个数字,而不是任何其他类型。

标签: php filter-input


【解决方案1】:

这取决于您需要什么或适合您的应用程序,真的。一个人会验证它,然后说“是的,这是(或不是)一个有效的浮点数”,而另一个人会清理它以获得任何不可接受的值并返回它,如果原始输入是有效的,或者不说什么不要开始。

这同样适用于其他 FILTER_SANITIZE_*FILTER_VALIDATE_*constants,但在本例中,我们将研究浮点验证和清理,正如原始问题中所问的那样。

一起来看看吧!

$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)。

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

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

您可以在live demo 中亲自查看。

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

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

【讨论】:

  • 感谢您的精彩回答,现在事情对我来说更清楚了。
猜你喜欢
  • 1970-01-01
  • 2011-10-17
  • 2015-08-24
  • 1970-01-01
  • 2020-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
相关资源
最近更新 更多