我认为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))
有没有另一种干净但工作的方式来做到这一点?
我认为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))
有没有另一种干净但工作的方式来做到这一点?
你总是可以只投它:
$id = (int) $_GET['id'];
不要忘记检查,如果其设定的$ id = isset($ _ GET [ '身份证'])? (int)$ _GET ['id']:0;否则,如果E_NOTICE设置您将得到通知,你没有标识指数$ _GET –
由于两者,因此无需过滤/消毒? –
您可以将字符串转换为整数,以不同的方式:
$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
感谢您的链接,它很有用。 –
通过铸造为int(INT)$ _ GET [ '身份证']似乎是最快的选项。您也可以使用is_numeric()来检查字符串是否为数字。
要注意的是filter_var可以返回布尔值失败假,这将作为整数0
你可以阅读更多有关manual字符串转换进行评估。
手册中的警告: 可以转换布尔值,浮点数和字符串,但其他类型的转换为整数的行为未定义。不要依赖任何观察到的行为,因为它可以随时更改,恕不另行通知!
感谢信息+1。 –
你的第一个if语句将始终默认为正确的,因为你已经定义了$ id变量看我的其他评论 –
所以我只是检查'is_int()'?好的,谢谢我使用你制作的三元运算符。无需过滤/消毒? –
没有必要,因为如果你是在获得一个ID,以进一步消毒GET那么它将被类型强制转换为整数,所以你需要做的是检查,如果$ id为大于0如果($ ID> 0){/ *做的东西* /} –