در این جلسه از سری آموزشی پیاچپی قصد داریم تا شما را با مبحث فیلترهای این زبان برنامهنویسی آشنا کنیم. از فیلترها به منظور اعتبارسنجی و پاکسازی دادههای ورودی میتوان بهره گرفت. در ادامه با ما همراه باشید.
فیلترهای پیاچپی به منظور اعتبارسنجی و بهینه کردن ورودیها مورداستفاده قرار میگیرند. در واقع فیلترهای پیاچپی دارای بسیاری از توابع لازم برای بررسی ورودیهای کاربر بوده و طراحی شده تا دادهها را با آن به روشی آسانتر و سریعتر اعتبارسنجی کرد.
تابع ()filter_list میتواند به منظور لیست کردن تمام فیلترهایی که پیاچپی ارائه میدهد مورداستفاده قرار گیرد. نرمافزار Xampp را اجرا کرده و سرور آپاچی و MySQL را اجرا کنید. در پوشه htdocs یک پوشه به اسم filter ساخته و سپس یک فایل جدید ایجاد کنید. نام این فایل را phpfilter.php تعیین کرده و کد زیر را در آن قرار دهید:
<!DOCTYPE html>
<html>
<head>
<style>
table, th, td {
border: 1px solid black;
border-collapse: collapse;
}
th, td {
padding: 5px;
}
</style>
</head>
<body>
<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>
</body>
</html>
نتیجه اجرای کد فوق چیزی شبیه به زیر خواهد بود:
Filter Name | Filter ID |
int | ۲۵۷ |
boolean | ۲۵۸ |
float | ۲۵۹ |
validate_regexp | ۲۷۲ |
validate_url | ۲۷۳ |
validate_email | ۲۷۴ |
validate_ip | ۲۷۵ |
string | ۵۱۳ |
stripped | ۵۱۳ |
encoded | ۵۱۴ |
special_chars | ۵۱۵ |
full_special_chars | ۵۲۲ |
unsafe_raw | ۵۱۶ |
۵۱۷ | |
url | ۵۱۸ |
number_int | ۵۱۹ |
number_float | ۵۲۰ |
magic_quotes | ۵۲۱ |
callback | ۱۰۲۴ |
همانطور که در جدول بالا مشاهده میکنید تمامی فیلترهایی که پیاچپی ارائه میکند لیست شدهاند.
چرا باید از فیلترها استفاده کنیم؟
بسیاری از اپلیکیشنهای تحت وب قطعا نیاز به ورودی و خروجی دادهها توسط کاربران دارد که این دادهها میتواند یکی از موارد زیر باشد:
- ورودی دادهها توسط کاربر در فرمها
- کوکیها
- دادههای وبسرویس
- متغیرهای سرور
- نتایج کوئریهای بانکهای اطلاعاتی
شما باید همیشه چنین نوع دادههایی را اعتبارسنجی کنید.
ممکن است برخی از دادههای ورودی مشکلات و مسائل امنیتی مهم را در صفحات وب شما که با پیاچپی ایجاد شدهاند، ایجاد کنند. در این شرایط فیلترهای پیاچپی میتوانند به منظور اعتبارسنجی مورداستفاده قرار گیرند.
تابع ()filter_var میتواند دو عملیات اعتبارسنجی و بهینهسازی دادهها را انجام دهد. این تابع دو ورودی میگیرد. یکی دادهای که قصد داریم آن را اعتبارسنجی و پاکسازی کنیم و دیگری نوع فیلتری که قصد استفاده از آن را داریم.
بهینهسازی یک رشته متنی
در مثال زیر از تابع ()filter_var به منظور حذف تگهای اچتیامال از رشته متنی استفاده شده است:
<?php
$str = “<h1>Hello World!</h1>”;
$newstr = filter_var($str, FILTER_SANITIZE_STRING);
echo $newstr;
?>
نتیجه اجرای کد فوق به صورت زیر خواهد بود:
Hello World!
همانطور که میبینید تگهای HTML از این رشته متنی حذف شده است. در مثال بالا ابتدا متغیر str را به عنوان ورودی تعیین میکنیم و پس از قرار دادن یک کاما، نوع فیلتر موردنظر خود را به عنوان ورودی دوم تعیین میکنیم. با استفاده از فیلتر FILTER_SANITIZE_STRING میتوان تگهای اچتیامال اضافه را از رشتههای متنی حذف کرد.
اعتبارسنجی عدد
در مثال زیر با استفاده از ()filter_var قصد داریم تا متغیری از نوع عددی را بررسی کنیم. اگر متغیر ما واقعا عدد صحیح باشد خروجی ما عبارت Integer is valid خواهد بود. اگر این متغیر عددی نباشد خروجی عبارت Integer is not valid است.
<?php
$int = 100;
if (!filter_var($int, FILTER_VALIDATE_INT) === false) {
echo(“Integer is valid”);
} else {
echo(“Integer is not valid”);
}
?>
همانطور که در مثال بالا هم میبینید ورودی اول متغیر int بوده و ورودی دوم فیلتر بررسی عددی بودن یعنی FILTER_VALIDATE_INT قرار داده شده است.
نکتهای در هنگام کار با تابع ()filter_var در مورد عدد صفر وجود دارد. اگر در مثال بالا مقدار متغیر int برابر با صفر باشد خروجی تابع Integer is not valid میشود. برای حل این مشکل باید از کدی مثل کد زیر استفاده کنیم.
<?php
$int = 0;
if (filter_var($int, FILTER_VALIDATE_INT) === 0 || !filter_var($int, FILTER_VALIDATE_INT) === false) {
echo(“Integer is valid”);
} else {
echo(“Integer is not valid”);
}
?>
نتیجه اجرای کد بالا به صورت زیر خواهد بود:
Integer is valid
اعتبارسنجی آیپی
در مثال زیر با استفاده از تابع ()filter_var قصد داریم تا محتوای متغیر ip را بررسی کنیم که آیا این متغیر حاوی یک آیپی معتبر است یا خیر.
<?php
$ip = “127.0.0.1”;
if (!filter_var($ip, FILTER_VALIDATE_IP) === false) {
echo(“$ip is a valid IP address”);
} else {
echo(“$ip is not a valid IP address”);
}
?>
نتیجه اجرای کد بالا به صورت زیر خواهد بود:
۱۲۷٫۰٫۰٫۱ is a valid IP address
همانطور که میبینید از فیلتر FILTER_VALIDATE_IP در تابع ()filter_var میتوان به منظور اعتبارسنجی آیپی بهره گرفت.
اعتبارسنجی ایمیل
در مثال زیر با استفاده از تابع ()filter_var قصد دارید تا تمام کاراکترهای غیرقانونی را از متغیر email حذف کرده و سپس بررسی کنیم که آیا فرمت ایمیل صحیح است یا خیر. در اینصورت باید از کدی مثل زیر استفاده کنیم:
<?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(“$email is a valid email address”);
} else {
echo(“$email is not a valid email address”);
}
?>
نتیجه اجرای کد فوق به صورت زیر خواهد بود:
test@example.com is a valid email address
همانطور که میبینید ابتدا با تابع فیلتر پیاچپی و فیلتر FILTER_SANITIZE_EMAIL قصد داریم تا متغیر email را از نظر کاراکترهای غیرقانونی بررسی کرده و سپس کاراکترهای اضافه را از آن حذف کنیم.
سپس با فیلتر FILTER_VALIDATE_EMAIL و یک عبارت شرطی صحیح بودن فرمت کلی ایمیل را بررسی کردهایم.
اعتبارسنجی آدرس URL
در مثال زیر با استفاده از تابع ()filter_var ابتدا تمامی کاراکترهای غیرقانونی را از آدرس URL حذف کرده و سپس آن را بررسی میکنیم تا ببینیم یک URL معتبر است یا خیر.
<?php
$url = “http://www.mehrastan.ac.ir”;
// 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”);
}
?>
نتیجه اجرای کد فوق نیز به صورت زیر خواهد بود:
http://www.mehrastan.ac.ir is a valid URL
در این جلسه بیشتر فیلترهای پرکاربرد پیاچپی را مرور کردیم. در جلسه آینده فیلترهای پیشرفتهتری را بررسی میکنیم و علاوه بر این، مباحث دیگری را با هم مرور میکنیم.
اگر در مورد مباحث این جلسه هرگونه سوالی دارید در بخش نظرات آن را اعلام کنید.
منبع: زومیت