2015-11-10 37 views
0

我认为filter_input(type, name, FILTER_SANITIZE_NUMBER_INT)会为int的字符串转换,但它似乎没有。FILTER_SANITIZE_NUMBER_INT不字符串转换为int

$id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT); 

if (isset($id) && is_int($id)) 

有没有另一种干净但工作的方式来做到这一点?

+0

你的第一个if语句将始终默认为正确的,因为你已经定义了$ id变量看我的其他评论 –

+0

所以我只是检查'is_int()'?好的,谢谢我使用你制作的三元运算符。无需过滤/消毒? –

+0

没有必要,因为如果你是在获得一个ID,以进一步消毒GET那么它将被类型强制转换为整数,所以你需要做的是检查,如果$ id为大于0如果($ ID> 0){/ *做的东西* /} –

回答

3

你总是可以只投它:

$id = (int) $_GET['id']; 
+1

不要忘记检查,如果其设定的$ id = isset($ _ GET [ '身份证'])? (int)$ _GET ['id']:0;否则,如果E_NOTICE设置您将得到通知,你没有标识指数$ _GET –

+0

由于两者,因此无需过滤/消毒? –

3

您可以将字符串转换为整数,以不同的方式:

$id = (int)$_GET['id']; // Like wogsland showed. 
$id = intval($_GET['id']); // This works but is around twice as slow as (int). 

这里有一些测试,我发现,两相比较:Fastest way to convert string to integer in PHP

+0

感谢您的链接,它很有用。 –

1

通过铸造为int(INT)$ _ GET [ '身份证']似乎是最快的选项。您也可以使用is_numeric()来检查字符串是否为数字。

要注意的是filter_var可以返回布尔值失败假,这将作为整数0

你可以阅读更多有关manual字符串转换进行评估。

手册中的警告: 可以转换布尔值,浮点数和字符串,但其他类型的转换为整数的行为未定义。不要依赖任何观察到的行为,因为它可以随时更改,恕不另行通知!

+0

感谢信息+1。 –