فیلترهای پیشرفته PHP — filter_input، filter_var_array، filter_list و اعتبارسنجی دادههای پیچیده
filter_input — فیلتر کردن ورودی
برای فیلتر کردن دادههای $_GET، $_POST، $_COOKIE و $_SERVER:
<?php
// فیلتر کردن GET
$email = filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL);
// فیلتر کردن POST
$age = filter_input(INPUT_POST, "age", FILTER_VALIDATE_INT);
// پاکسازی
$name = filter_input(INPUT_POST, "name", FILTER_SANITIZE_STRING);
?>
انواع INPUT
| ثابت | توضیح |
INPUT_GET | دادههای $_GET |
INPUT_POST | دادههای $_POST |
INPUT_COOKIE | دادههای $_COOKIE |
INPUT_SERVER | دادههای $_SERVER |
INPUT_ENV | دادههای $_ENV |
filter_var_array — فیلتر کردن آرایه
<?php
$data = [
"name" => "علی",
"email" => "ali@test.com",
"age" => "25",
];
$filters = [
"name" => FILTER_SANITIZE_STRING,
"email" => FILTER_VALIDATE_EMAIL,
"age" => [
"filter" => FILTER_VALIDATE_INT,
"options" => ["min_range" => 18, "max_range" => 120]
],
];
$result = filter_var_array($data, $filters);
// ["name" => "علی", "email" => "ali@test.com", "age" => 25]
?>
filter_input_array — فیلتر کردن همه ورودیها
<?php
$filters = [
"name" => FILTER_SANITIZE_STRING,
"email" => FILTER_VALIDATE_EMAIL,
"age" => FILTER_VALIDATE_INT,
];
$input = filter_input_array(INPUT_POST, $filters);
?>
گزینههای فیلتر (Options)
<?php
// عدد با محدوده
$options = [
"options" => [
"min_range" => 1,
"max_range" => 100,
"default" => 50, // مقدار پیشفرض اگر نامعتبر باشد
]
];
$score = filter_var($_POST["score"], FILTER_VALIDATE_INT, $options);
?>
پرچمهای فیلتر (Flags)
| پرچم | توضیح |
FILTER_FLAG_ALLOW_HEX | اجازه اعداد هگز |
FILTER_FLAG_ALLOW_OCTAL | اجازه اعداد هشتهشتی |
FILTER_FLAG_ALLOW_THOUSAND | اجازه کاما در اعداد |
FILTER_FLAG_ALLOW_FRACTION | اجازه اعشار |
FILTER_FLAG_IPV4 | فقط IPv4 |
FILTER_FLAG_IPV6 | فقط IPv6 |
FILTER_FLAG_EMAIL_UNICODE | اجازه یونیکد در ایمیل |
filter_list — فهرست همه فیلترها
<?php
$filters = filter_list();
foreach ($filters as $filter) {
echo $filter . " (ID: " . filter_id($filter) . ")<br>";
}
?>
فیلترهای اعتبارسنجی کامل
| فیلتر | توضیح |
FILTER_VALIDATE_BOOLEAN | بولین (true/false/1/0/yes/no) |
FILTER_VALIDATE_EMAIL | ایمیل معتبر |
FILTER_VALIDATE_FLOAT | عدد اعشاری |
FILTER_VALIDATE_INT | عدد صحیح |
FILTER_VALIDATE_IP | آدرس IP |
FILTER_VALIDATE_MAC | آدرس MAC |
FILTER_VALIDATE_REGEXP | عبارت منظم |
FILTER_VALIDATE_URL | URL معتبر |
فیلترهای پاکسازی کامل
| فیلتر | توضیح |
FILTER_SANITIZE_EMAIL | حذف کاراکترهای نامعتبر ایمیل |
FILTER_SANITIZE_ENCODED | URL-encode |
FILTER_SANITIZE_MAGIC_QUOTES | افزودن اسلش |
FILTER_SANITIZE_NUMBER_FLOAT | فقط عدد و اعشار |
FILTER_SANITIZE_NUMBER_INT | فقط عدد و علامت |
FILTER_SANITIZE_SPECIAL_CHARS | HTML-encode کاراکترهای خاص |
FILTER_SANITIZE_FULL_SPECIAL_CHARS | HTML-encode کامل |
FILTER_SANITIZE_URL | حذف کاراکترهای نامعتبر URL |
اعتبارسنجی با RegEx
<?php
$pattern = "/^09\d{9}$/"; // موبایل ایران
$phone = "09123456789";
$valid = filter_var($phone, FILTER_VALIDATE_REGEXP, [
"options" => ["regexp" => $pattern]
]);
?>