با عرض سلام خدمت کاربران محترم سایت پی وی لرن. در این جلسه قصد داریم تا به مبحث فیلترها در php بپردازیم. پیشتر به اعتبار سنجی ورودی ها در php و اهمیت آن اشاره کردیم.
فیلتر ها (Filters) برای اعتبار سنجی ورودی ها مورد استفاده قرار می گیرند.
اعتبار سنجی (Validating) داده = تشخیص اینکه آیا داده ها در فرم مناسب هستند
پاک سازی (Sanitizing) داده ها = حذف کاراکتر های غیر مجاز فرم.
افزونه فیلتر php دارای توابع بسیاری برای چک کردن ورودی کاربر هست و برای اعتبار سنجی آسان و سریع طراحی شده است.
تابع ()filter_list می تواند لیستی از چیزهایی که افزونه فیلتر ارائه می دهد را نشان دهد:
1 2 3 4 5 6 7 8 9 10 11 | <table> <tr> <td>Filter Name</td> <td>Filter ID</td> </tr> <?php foreach (filter_list() as $id =>$filter) { echo '<tr><td>' . $filter . '</td><td>' . filter_id($filter) . '</td></tr>'; } ?> </table> |
بسیاری از وب اپلیکیشن ها ورودی های خارجی را دریافت می کنند. مانند:
که باید تمام این ورودی ها را به دلایل امنیتی اعتبار سنجی کنیم.
تابع ()filter_var هر دو عمل اعتبار سنجی و پاک سازی را انجام می دهد.
این تابع یک متغیر را با یک فیلتر مشخص شده فیلتر می کند. و دو آرگومان را می گیرد:
مثال زیر از تابع ()filter_var برای حذف کردن تمام تگ های HTML از یک رشته، استفاده می کند:
1 2 3 4 5 | <?php $str = "<h1>Hello World!</h1>"; $newstr = filter_var($str, FILTER_SANITIZE_STRING); echo $newstr; ?> |
مثال زیر متغیر int$ را بررسی می کند که آیا یک عدد صحیح هست یا نه:
1 2 3 4 5 6 7 8 9 | <?php $int = 100; if (!filter_var($int, FILTER_VALIDATE_INT) === false) { echo("داده عدد صحیح است"); } else { echo("داده عدد صحیح نیست"); } ?> |
در مثال بالا اگر متغیر int$ را به ۰ تغییر دهیم، تابع این متغیر را عدد صحیح تشخیص نمی دهد.
برای رفع این مشکل به صورت زیر عمل می کنیم:
1 2 3 4 5 6 7 8 9 | <?php $int = 0; if (filter_var($int, FILTER_VALIDATE_INT) === 0 || !filter_var($int, FILTER_VALIDATE_INT) === false) { echo("داده عدد صحیح است"); } else { echo("داده عدد صحیح نیست"); } ?> |
مثال زیر از تابع ()filter_var برای چک کردن معتبر بودن ip آدرس استفاده می کند:
1 2 3 4 5 6 7 8 9 | <?php $ip = "127.0.0.1"; if (!filter_var($ip, FILTER_VALIDATE_IP) === false) { echo("آی پی معتبر است"); } else { echo("آی پی معتبر نیست"); } ?> |
مثال زیر از تابع ()filter_var برای حذف کاراکتر های غیر مجاز و اعتبار سنجی متغیر email$ استفاده می کند:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php $email = "john.doe@example.com"; // Remove all illegal characters from email $email = filter_var($email, FILTER_SANITIZE_EMAIL); // Validate e-mail if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) { echo("آدرس ایمیل معتبر است"); } else { echo("آدرس ایمیل معتبر نیست"); } ?> |
مثال زیر از تابع ()filter_var برای حذف کاراکتر های غیر مجاز و اعتبار سنجی متغیر url$ استفاده می کند:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php $url = "https://www.w3schools.com"; // Remove all illegal characters from a url $url = filter_var($url, FILTER_SANITIZE_URL); // Validate url if (!filter_var($url, FILTER_VALIDATE_URL) === false) { echo("$url is a valid URL"); } else { echo("$url is not a valid URL"); } ?> |
در ادامه برخی از فیلترهای پیشرفته داده را خواهیم دید.
مثال زیر از تابع ()filter_var برای چک کردن نوع int و بین ۱ تا ۲۰۰ بودن یک متغیر استفاده می کند:
1 2 3 4 5 6 7 8 9 10 11 | <?php $int = 122; $min = 1; $max = 200; if (filter_var($int, FILTER_VALIDATE_INT, array("options" => array("min_range"=>$min, "max_range"=>$max))) === false) { echo("متغیر در محدوده مورد نظر نیست"); } else { echo("متغیر در محدوه مورد نظر هست"); } ?> |
مثال زیر از تابع ()filter_var برای چک کردن اینکه آیا متغیر ip$ یک آدرس معتبر IPv6 هست یا نه، استفاده می کند:
1 2 3 4 5 6 7 8 9 | <?php $ip = "2001:0db8:85a3:08d3:1319:8a2e:0370:7334"; if (!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false) { echo("متغیر یک آدرس معتبر IPv6 هست"); } else { echo("متغیر یک آدرس معتبر IPv6 نیست"); } ?> |
مثال زیر تمام تگ های HTML و تمام کاراکتر هایی را که مقدار کد ASCII آن ها از ۱۲۷ بیشتر هست را حذف می کند:
1 2 3 4 5 6 | <?php $str = "<h1>Hello WorldÆØÅ!</h1>"; $newstr = filter_var($str, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH); echo $newstr; ?> |
جلسه کار با توابع فیلتر در php نیز به پایان رسید.
در جلسه بعد به مبحث مهم مدیریت خطا در php خواهیم پرداخت.
با پی وی لرن همراه باشید.
همچنین می توانید نظرات و سوالات خود را از طریق بخش نظرات با ما در میان بگذارید.
فریبا
ای کاش مطالب w3school رو نمیزدید google translate و بیلرید اینجا….همینو من اونجا ترجمه کردم ولی وقتی به یه سایت فارسی مراجعه میکنم یعنی اینکه نفهمیدم و کاملتر شو میخوام …دقیقا ترجمه کردید گذاشتید این جا….والا قانون تولید محتوا این نیست نویسنده عزیز
پی وی لرن
سلام
بعضی موارد را نمی شود ترجمه دیگری کرد چون ترجمه روان بوده و نمی توانیم در این موارد حاشیه برویم و از خودمان متن دیگری را قرار دهیم و یا تحلیل کنیم. برای موردی هم که عرض می کنید اگر بخواهیم هر متن را با توجه به دانسته های خودمان درج کنیم این مورد امکان پذیر نیست، هم زمان زیادی می برد و هم لازم است که یک استاد این کار را انجام دهد همانطور که می دانید این مطالب رایگان هستند و مبلغی بابت آن گرفته نشده و با این حال تلاش، زمان و هزینه زیادی را از ما گرفته است.
تنها دلگرمی ما اعتماد شما و خرید از وب سایت ما می باشد، ویدیوهای آموزشی ما همان چیزی است که شما می خواهید.
در ضمن ما هیچ نوع تبلیغاتی را تابه الان بر روی سایت قرار نداده.
Ali
ممنون خیلی قشنگ توضیح دادید ممنون 🙂