PHP filter过滤器的基础使用

来源:互联网 发布:base64decoder 源码 编辑:程序博客网 时间:2024/05/19 22:46

过滤器可用于验证和过滤非安全来源的数据,如表单数据等。通过使用过滤器,您能够确保应有程序获得正确的输入类型,输入过滤也是最重要的安全课题之一

PHP 的过滤器函数•filter_var() - 通过一个指定的过滤器来过滤单一的变量•filter_var_array() - 通过相同的或不同的过滤器来过滤多个变量•filter_input - 获取一个输入变量,并对它进行过滤•filter_input_array - 获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤•filter_has_var() - 检查是否存在指定输入类型的变量。

filter_var()

<?php     $int = 123;    // 无额外过滤选项 只判定是否为整数    if(!filter_var($int, FILTER_VALIDATE_INT)) { // 输出:Integer is valid        echo "Integer is not valid";    } else {        echo "Integer is valid";    }    // 选项和标志,属于额外过滤选项    $int_options = array(        "options" => array( // 'options' 固定            "min_range" => 0, // 最小值            "max_range" => 100 // 最大值 'min_range'和'max_range' 也固定        )    );    // 过滤单一变量 即$int 增加额外过滤选项    if(!filter_var($int, FILTER_VALIDATE_INT, $int_options)) { // 输出:Integer is not valid        echo "Integer is not valid";    } else {        echo "Integer is valid";    } ?>

filter_has_var() 和 filter_input()

<hr>     <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">        Email : <input type="text" name="email">        Url: <input type="text" name="url">        <input type="submit" name="submit" value="提交">    </form><hr><?php     // 检查提交表单中是否含 "email"    if (!filter_has_var(INPUT_POST, "email")) {        echo "Input type does not exists<br>";    } else {        // 检查是否为有效邮箱地址        if (!filter_input(INPUT_POST, "email", FILTER_VALIDATE_EMAIL)) {            echo "E-mail is not valid<br>";        } else {            echo "E-mail is valid<br>";        }    }    if (!filter_has_var(INPUT_POST, "url")) {        echo "Input type does not exists<br>";    } else {        if (!filter_input(INPUT_POST, "url", FILTER_VALIDATE_URL)) {            echo $_POST['url'] . " is not valid<br>";        } else {            echo $_POST['url'] . " is valid<br>";        }    } ?>
filter_has_var(type, variable) 两个参数必填参数一: •INPUT_GET        •INPUT_POST        •INPUT_COOKIE        •INPUT_SERVER        •INPUT_ENV参数二:表单里的命名变量filter_input(input_type, variable, filter, options) 前两个参数必填,后两个可选填,第三个不填则使用默认过滤条件,只判断是否为字符串。参数一同上

filter_input_array()过滤多输入

<form method="get" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">    Name: <input type="text" name="name">    Age: <input type="text" name="age">    Email: <input type="text" name="email">    <input type="submit" name="submit" value="提交"></form>$filters = array(    "name" => array(        "filter" => FILTER_SANITIZE_STRING    ),    "age" => array(        "filter" => FILTER_VALIDATE_INT,        "options" => array(            "min_range" => 1,            "max_range" => 120        )    ),    "email" => FILTER_VALIDATE_EMAIL,);// 符合过滤条件返回原变量否则返回false 'INPUT_GET' 对应表单提交的 method$result = filter_input_array(INPUT_GET, $filters);if (!$result["age"]) {    echo "Age must be a number between 1 and 120 .<br>";} else {    echo "Age is valid.<br>";}if (!$result["email"]) {    echo "Email is not valid.<br>";} else {    echo "Email is valid.<br>";}if (!$result["name"]) {    echo "User input is not valid.<br>";} else {    echo "User input is valid.<br>";}

使用 Filter Callback
通过使用 FILTER_CALLBACK 过滤器,可以调用自定义的函数,把它作为一个过滤器来使用。这样,我们就拥有了数据过滤的完全控制权。

<?php    function convertSpace($string) {        // str_replace() 函数用于替换字符串  这里用空格" "替换下划线"_" 返回替换后的字符串        return str_replace("_", " ", $string);    }    $string = "Peter_is_a_great_guy!";    echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace"));// 输出:Peter is a great guy!?>