FILTER_SANITIZE与FILTER VALIDATE,有什么不同 - 以及使用哪些?

时间:2017-06-08 21:32:21

标签: 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));

1 个答案:

答案 0 :(得分:9)

这取决于您的需求或适合您的应用,真的。一个人会验证它,并说“是的,这是(或不是)一个有效的浮动”,而另一个会清除它的任何不可接受的值并返回,并且如果原始输入有效或者没有说什么不要一开始。

同样适用于其他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)。

如您所见,如果FILTER_VALIDATE_FLOAT不是有效的浮点数,则任何false将返回布尔值0.00,如果它是有效的,则返回实际的浮点值(这是一个“真实的”值) 。请记住,if (filter_var($input, FILTER_VALIDATE_FLOAT) === false) { // Oh noes! $input wasn't a valid float! } 将是一个“虚假”值,因此如果您想检查验证是否失败,您应该使用严格比较,以防输入为零,但仍然有效的。

FILTER_SANITIZE_FLOAT

您可以在此live demo中看到自己。

结束
如果您想在计算中使用它,您可能希望验证它,让用户知道它的格式无效,但您可以清理它,并且无论如何都要使用它

其他过滤器
此处的检查显示了foreach($videos as $video) { $lessons=new App\Lessons() $filename=$video->getClientOriginalName(); $vidWay=public_path('videos'); $lessons->video=$filename; // echo $filename; $video->move($vidWay,$filename); $lessons->title=$lesson_titles[$upload_count]; $lessons->course_id=$Course->id; $lessons->save(); $upload_count++; // echo $filename; } 的用法,但还有其他验证和santation过滤器。有关完整说明,请参阅以下链接。