通用$ _GET验证器

时间:2011-09-28 20:56:00

标签: php

我想要一个简单的通用$ _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...
}  

的问候, //吨

2 个答案:

答案 0 :(得分:5)

filter_input()非常接近您想要做的事情。

它有相当数量的validationsanitation过滤器。

从手册中窃取的一个例子:

<?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);