2012-09-09 40 views
0

如果下面的代码行更好地用于确保我的代码更安全,那该怎么办?我应该使用filter_var函数的settype函数吗?settype()vs filter_var()

settype($number,'integer') 

filter_var($number, FILTER_SANITIZE_NUMBER_INT); 

感谢你

+3

或者只是用'(int)'将其转换为int。所有三个选项都会得到同样的结果。 –

+2

这真的取决于你想用'$ number'做什么。 – Jocelyn

回答

2

由于documentation说,大约FILTER_SANITIZE_NUMBER_INT:除了数字

删除所有的字符,加号和减号。

因此,如果您希望在SQL查询中使用一个ID,我将使用正则表达式来检查我只有数字/^[0-9]+$/。因为FILTER_SANITIZE_NUMBER_INT将允许-12这在这种情况下是没有意义的。

filter_var和settype之间的主要区别是,将一个字符串解析变量,并返回一个字符串,另一个将它转换为一个整数。

$string = "+12"; 
var_dump(filter_var($string, FILTER_SANITIZE_NUMBER_INT)); 
settype($string, "integer"); 
var_dump($string); 

输出:

string(3) "+12" 
int(12) 

所以这真的取决于上下文。

-3

settype(int)filter_var更好。因为filter_var有很多逻辑判断。

+0

哥们我认为你需要睡一觉 –

+1

你能详细说明*很多逻辑判断*吗? – Tchoupi

+0

@ImranOmarBukhsh对不起? – Tchoupi