編碼的網址是:
*.php?page=%20%209999%20%20
解碼後的網址是:
*.php?page= 9999
因此你觀察int(9999)
。 %20
和%0A
分別是空格和換行符。可以用下面的代碼可以觀察到這種現象:
$_GET["page"] = " 9999 ";
$name = filter_var($_GET["page"], FILTER_VALIDATE_INT);
var_dump($name);
INT(9999)
這些URL編碼的空間和休息,他們得到過濾器,然後被urldecoded,並FILTER_VALIDATE_INT
不對空白非常嚴格。
一個調整濾波器的方法是使用一個callback更嚴格整數測試:
$_GET["page"] = " 9999 ";
function FILTER_VALIDATE_STRICT_INT($val) {
return intval(urlencode($val)) === intval($val) ? intval($val) : false;
}
$args=array(
'page'=>array(
'filter'=>FILTER_CALLBACK,
'options'=>"FILTER_VALIDATE_STRICT_INT"));
$ret=filter_var_array($_GET, $args);
var_dump($ret['page']);
返回
布爾(假)
那些「URL編碼值「只是空格'%20'和換行符'%0A'。 – mario
urldecode()第一個 –
@mario右邊,但是空格和換行符的整數是什麼時候? – KaekeaSchmear