我有一个页面,如下所示:
http://sitename/gallery.php?page=2
它在通过它我们可以浏览底部的分页链接。 每当数字被点击的页面,它会发送带有参数的页面= 1或页面= 2等一个GET请求......
当我将这些值存储到$page
从德$_GET
变量,它是一个字符串值。 我可以将其转换为使用整数(int)
是这样的:
if(!empty($_GET['page'])){
$page = (int)$_GET['page'];
echo "Page Number: ".$page;
}
但是,我怎么能确保传递的值是一个整数,而不是其他的废话?
使用过滤器:
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
使用filter_var()
与FILTER_VALIDATE_INT
上过滤器,并检查返回值。
使用is_numeric()来 。
is_int()
将无法工作,因为GET参数总是字符串。
我已经在这里和那里留下了一些意见。 由于弱类型,如功能empty
和isset
往往是不可靠的。 检查最快捷的方式,如果一个参数是int或不IMO将是这样:
if (array_key_exists('page',$_GET) && ($_GET['page'] == (int) $_GET['page']))
铸造为int,然后比较各自的值,只有当将返回true $_GET['page']
是有效的int。 如果你要使用某种原因,严格的类型比较(有的做),你可能会增加一倍投:
if (array_key_exists('page',$_GET) && ($_GET['page'] === (string)((int) $_GET['page'])))
但是,在这种特殊情况下,我实在看不出你为什么会想这样做
这是一种如何检查参数,如果它是intetger与否。
if (is_int((int) $_GET['user_id']) && (int) $_GET['user_id'] != 0) {
$user_id = $_GET['user_id'];
}
使用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;
}
if(!empty($_GET['page']) and is_numeric($_GET['page'])){
$page = (int)$_GET['page'];
echo "Page Number: ".$page;
}
is_numeric可能是你所需要的。
您还可以检查与
isNAN($_GET['something']);//is_numeric($_GET['something'])
它返回一个布尔值(真,FLASE)....如果其真,那么它不是整数,如果假其一个整数。
if (isset($_GET['page']) && (($get_page_filtered = filter_var($_GET['page'], FILTER_VALIDATE_INT)) !== FALSE) {
$get_page_int = $get_page_filtered;
}
@see https://stackoverflow.com/a/41868665/6758130