我有一个这样的页面:
http://sitename/gallery.php?page=2
它底部有分页链接,我们可以通过它浏览。每次点击页码时,都会发送参数页面= 1 或页面= 2 的GET请求,等等...
当我从teh $page
变量将这些值存储到$_GET
时,它是一个字符串值。我可以使用(int)
将其转换为整数:
if(!empty($_GET['page'])){
$page = (int)$_GET['page'];
echo "Page Number: ".$page;
}
但是,如何确保传递的值仅为 整数 而不是其他废话?
答案 0 :(得分:16)
使用过滤器:
if (null !== ($page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE))) {
// $page is now an integer
}
这还会检查变量是否同时出现在查询字符串中。如果您想区分缺失和无效,则必须将最后一个参数留给filter_input()
:
$page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT);
// $page can be null (not present), false (present but not valid) or a valid integer
答案 1 :(得分:4)
将filter_var()
与FILTER_VALIDATE_INT
过滤器一起使用,并检查返回值。
答案 2 :(得分:1)
使用is_numeric()。
is_int()
将无效,因为GET参数始终为字符串。
答案 3 :(得分:1)
我在这里和那里留下了一些评论。由于输入较弱,empty
和isset
等功能往往不可靠。检查参数是否为int或IMO的最快方法是:
if (array_key_exists('page',$_GET) && ($_GET['page'] == (int) $_GET['page']))
仅当$_GET['page']
是有效的int时,转换为int然后比较各自的值才会返回true。如果你想出于某种原因使用严格的类型比较(有些原因),你可以进行双重投射:
if (array_key_exists('page',$_GET) && ($_GET['page'] === (string)((int) $_GET['page'])))
但在这种特殊情况下,我真的不明白你为什么要那样做
答案 4 :(得分:1)
这是一种如何检查参数是否为整数的方法。
if (is_int((int) $_GET['user_id']) && (int) $_GET['user_id'] != 0) {
$user_id = $_GET['user_id'];
}
答案 5 :(得分:0)
使用is_int
可能无济于事。所有传入的参数(包括$ _GET和$ _POST)都被PHP解析为字符串。 is_int
函数检查数据类型,而不是值。 ctype_digit
仅检查数字:
if(isset($_GET['page']) && ctype_digit($_GET['page']){
$page = (int)$_GET['page'];
echo "Page Number: ".$page;
}
答案 6 :(得分:0)
if(!empty($_GET['page']) and is_numeric($_GET['page'])){
$page = (int)$_GET['page'];
echo "Page Number: ".$page;
}
is_numeric可能就是你所需要的。
答案 7 :(得分:0)
您也可以查看
isNAN($_GET['something']);//is_numeric($_GET['something'])
它返回一个布尔值(true,flase)....如果是真的那么它不是一个整数,假如它是一个整数。
答案 8 :(得分:0)
if (isset($_GET['page']) && (($get_page_filtered = filter_var($_GET['page'], FILTER_VALIDATE_INT)) !== FALSE) {
$get_page_int = $get_page_filtered;
}