settype()vs filter_var()

时间:2012-09-09 02:13:33

标签: php sanitization data-cleansing

如果使用以下行可以更好地确保我的代码更安全。我应该使用filter_var函数的settype函数吗?

settype($number,'integer') 

filter_var($number, FILTER_SANITIZE_NUMBER_INT);

感谢你

2 个答案:

答案 0 :(得分: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)

所以它真的取决于背景。

答案 1 :(得分:-3)

settype(int)优于filter_var。因为filter_var有许多逻辑判断。