is_int()无法在PHP中检查$ _GET?

时间:2010-06-28 18:25:43

标签: php get integer

这是我的代码:

<?php
$id = $_GET["id"];

if (is_int($id) === FALSE)  {
    header('HTTP/1.1 404 Not Found');
    exit('404, page not found');
    }
?>

它总是进入if。

7 个答案:

答案 0 :(得分:32)

is_int检查数据类型是否为整数,但$_GET中的所有内容都是字符串。因此,它将始终返回false

在紧要关头,您可以转换为整数,然后检查!= 0。

$id = isset($_GET['id']) ? (int) $_GET['id'] : null;

if (!$id) { // === 0 || === null
  header('HTTP/1.1 404 Not Found');
  exit('404, page not found');
}

但更强大的解决方案将涉及某种类型的输入字符串验证/过滤,如PHP的内置filter_input_array()

(10月13日编辑,因为它仍然收到了赞成票,而且措辞有些令人困惑。)

答案 1 :(得分:5)

$ _GET数组中的用户输入(以及其他超级全局)都采用字符串的形式。

is_int检查值的类型(即string),而不是它是否包含类似整数的值。为了验证输入是整数字符串,我建议使用ctype_digit或整数filterFILTER_VALIDATE_INT - 这样做的好处是实际将值更改为整数类型)。当然,您也可以使用(int)进行类型转换。

答案 2 :(得分:3)

来自is_int的PHP文档:

  

注意:测试变量是否为a   数字或数字字符串(例如   表单输入,总是一个字符串),   你必须使用is_numeric()

答案 3 :(得分:1)

任何用户输入都以字符串形式出现,因为PHP无法告诉您期望数据的数据类型。

如果要确保它是整数,请将其转换为整数或使用正则表达式。

<?php
$id = $_GET["id"];

if ((int) $id == 0)  {
    header('HTTP/1.1 404 Not Found');
    exit('404, page not found');
    }
?>

答案 4 :(得分:1)

尝试使用is_numeric代替is_intis_numeric检查是否给出了一个可以是数字的东西($_GET返回我认为的字符串)。 is_int检查变量是否为int

类型

答案 5 :(得分:0)

使用is_numeric() 评估内容,使用is_int()评估类型。

答案 6 :(得分:0)

或者,您可以使用正则表达式匹配来检查字符串是否为整数。

if(preg_match('/^\d+$/',$_GET['id'])) {
  // is an integer
}