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

标签 php filter-input

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

相关文章:

php - 单击链接时使用 jquery/ajax 发送/更新 div

javascript - 目标ajax请求后filter_input和直接访问$_POST之间的区别

php - 如何获取属于特定组的成员列表

php - 无法将 mysql 查询放在一起

PHP 的 filter_input() 剥离外部主机上的 $_SERVER 数据,但适用于本地主机

php - fatal error : Can't use function return value in write context in [filter_input]

php - filter_input 和 mysqli_real_escape_string 用于整数

php - filter_input - 如果未设置 GET 键,则设置为默认值

php - 在 codeigniter 中命名 Controller 和模型的最佳方式

php - 使用 PHP 数组或 JSON 的用途