目前我在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));
答案 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过滤器。有关完整说明,请参阅以下链接。