Filters Advanced

در PHP، فیلترها (Filters) برای اعتبارسنجی (Validation) و ضدعفونی کردن (Sanitization) داده‌ها استفاده می‌شن.
این قابلیت برای امنیت برنامه بسیار مهمه چون کمک می‌کنه ورودی کاربر پاکسازی یا بررسی بشه تا از مشکلاتی مثل XSS و SQL Injection جلوگیری بشه.

1️⃣ ()filter_var با گزینه‌های پیشرفته

تابع ()filter_var رو می‌تونیم همراه با flag و option استفاده کنیم.

مثال: اعتبارسنجی ایمیل

<?php $email = "test@example.com"; if (filter_var($email, FILTER_VALIDATE_EMAIL)) { echo "Valid email"; } else { echo "Invalid email"; } ?>

مثال: اعتبارسنجی عدد با محدوده

<?php $age = 25; $options = ["options" => ["min_range" => 18, "max_range" => 40]]; if (filter_var($age, FILTER_VALIDATE_INT, $options)) { echo "Age is valid"; } else { echo "Invalid age"; } ?>

📌 فقط اعداد بین 18 تا 40 معتبر هستن.

2️⃣ ()filter_input برای گرفتن داده از GET/POST

<?php // URL: test.php?age=22 $age = filter_input(INPUT_GET, "age", FILTER_VALIDATE_INT); if ($age) { echo "Age: $age"; } else { echo "Invalid age"; } ?>

3️⃣ فیلتر کردن چندین ورودی با ()filter_input_array

<?php $filters = [ "name" => FILTER_SANITIZE_STRING, "age" => [ "filter" => FILTER_VALIDATE_INT, "options" => ["min_range" => 18, "max_range" => 60] ], "email" => FILTER_VALIDATE_EMAIL ]; $result = filter_input_array(INPUT_GET, $filters); print_r($result); ?>

📌 اینجا چندین ورودی باهم بررسی و پاکسازی می‌شن.

4️⃣ فیلتر روی کل آرایه با ()filter_var_array

<?php $data = [ "name" => "Ali<script>", "age" => "25", "email" => "ali@example.com" ]; $filters = [ "name" => FILTER_SANITIZE_STRING, "age" => [ "filter" => FILTER_VALIDATE_INT, "options" => ["min_range" => 18, "max_range" => 60] ], "email" => FILTER_VALIDATE_EMAIL ]; $result = filter_var_array($data, $filters); print_r($result); ?>

📌 خروجی امن و معتبر برمی‌گرده.

5️⃣ پرچم‌های اضافی (Flags)

  • FILTER_FLAG_STRIP_HIGH → حذف کاراکترهای غیر ASCII (با کد بالای 127)

  • FILTER_FLAG_STRIP_LOW → حذف کاراکترهای کنترل (ASCII < 32)

  • FILTER_FLAG_ALLOW_FRACTION → اجازه عدد اعشاری

  • FILTER_FLAG_ALLOW_THOUSAND → اجازه جداکننده هزارگان در اعداد

مثال

<?php $num = "1,000.50"; $clean = filter_var($num, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND); echo $clean; // 1000.50 ?>

📌 جمع‌بندی

  • ()filter_var → فیلتر روی یک مقدار

  • ()filter_input → فیلتر روی ورودی (GET/POST/COOKIE)

  • ()filter_var_array / ()filter_input_array → فیلتر چند مقدار باهم

  • استفاده از options و flags برای کنترل دقیق‌تر اعتبارسنجی