PHP filter过滤器的基础使用

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

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!
?>

猜你喜欢

转载自blog.csdn.net/liangshilin/article/details/78224103