我想要一个简单的通用$ _GET-vars验证器,并且不需要重新发明轮子。
我可以使用任何可靠的简单脚本,例如:
function secure($varName,$format = 'int') {
//format: boolean,int,dec,str,date
//add stripslashes if mq
$var = $_GET[$varName];
switch($format) {
case 'int':
$r = floor($var);
break;
case 'boolean':
$r = ($var === true);
break;
case 'dec':
$r = preg_replace("/0-9.-/i", "", $val);
break;
case 'str':
..
case 'date':
//ISO 8601 is enough...
}
的问候, //吨
答案 0 :(得分:5)
filter_input()
非常接近您想要做的事情。
它有相当数量的validation和sanitation过滤器。
从手册中窃取的一个例子:
<?php
var_dump(filter_var('bob@example.com', FILTER_VALIDATE_EMAIL));
var_dump(filter_var('http://example.com', FILTER_VALIDATE_URL,
FILTER_FLAG_PATH_REQUIRED));
?>
答案 1 :(得分:2)
Pekka给出了一个我不知道的很棒的功能,但filter_input_array
是你真正想要的。
http://www.php.net/manual/en/function.filter-input-array.php
示例:
编辑:现在展示如何验证DateTime(即时间戳)。
/* data that came from GET
$_GET = array(
'id' => '14',
'name' => 'Guidoe'
'archived' => 'on',
'date' => '2006-12-12 10:00:00'
);
*/
$args = array(
'id' => array('filter' => FILTER_VALIDATE_INT,
'options' => array('min_range' => 1, 'max_range' => 1000)
),
'archived' => array('filter' => FILTER_VALIDATE_BOOLEAN,
'flags' => FILTER_NULL_ON_FAILURE
),
'date' => array('filter' => FILTER_CALLBACK,
'options' => 'valid_date_time'
)
'name' =>array('filter'=>FILTER_SANITIZE_STRING,
'flags'=>FILTER_FLAG_ENCODE_HIGH
)
);
function valid_date_time($string) {
$parsed = date_parse($string);
if($parsed['error_count']>0 || $parsed['warning_count']>0)
return false;
return new DateTime($string);
}
$myinputs = filter_input_array(INPUT_GET, $args);