我意识到这是一个非常古老的帖子,但如果有人在看,这里有一个答案。
有一种安全的方法可以在不使用 $_POST 上的提取的情况下自动执行此操作,如上所述,这是一个安全风险。如果你给它一个你期望的简单的键数组,这个函数将适用于 $_POST。
function post_params($arr){
$pp = array();
foreach($arr AS $key){
if(isset($_POST[$key])){
$pp[$key] = $_POST[$key];
}
}
return $pp;
}
然后,当您调用该函数时,请执行以下操作:
$expected_post_keys = array('firstname','lastname');
$safe_post_arr = post_params($expected_post_keys);
extract($safe_post_arr);
对于 $_GET 你可以采取一些额外的措施(你也可以对 $_POST 这样做):
function get_params($arr){
// arr predefined explicitly - do not call with _GET as argument
$gp = array();
foreach($arr as $key){
if(isset($_GET[$key])){
$gp[$key] = htmlspecialchars($_GET[$key]);
}else{
$gp[$key] = 0;
}
}
return $gp;
}
当您调用该函数时:
$valid_get_keys = array('id','action');
$safe_get_arr = get_params($valid_get_keys);
extract($safe_get_arr );
此方法为您提供您期望的每个变量/键,但如果它们未在 $_GET 中定义,它们的值将为 0。
如果您必须经常这样做,只需将这两种方法都放在一个类中,您就可以自动化了。您需要检索 _GET 或 _POST 的任何脚本都可以调用该类,然后通过为其提供必要的键来调用您需要的任何方法。