شرح صفوف ومحتوى الفقرة
تم إيقاف وإلغاء FILTER_SANITIZE_STRING في PHP 8.1+ لأن حذف الوسوم وترميز علامات الاقتباس عند الإدخال يشوه النصوص المشروعة ولا يضمن الحماية الكاملة في كل سياقات العرض.
- لا تستخدم
FILTER_SANITIZE_STRINGأبداً في PHP 8.1+ لأنها تطلق تحذير إهمال (Deprecated). - بدلاً من ذلك، نظف النص عند الإدخال بـ
trim()وتحقق من طوله بـmb_strlen()، ثم خزّن النص الحقيقي كما هو في قاعدة البيانات. - رمّز المخرجات لحماية HTML لحظة العرض فقط داخل القالب عبر
htmlspecialchars($text, ENT_QUOTES | ENT_SUBSTITUTE, "UTF-8").
يحافظ الفصل بين التحقق من المدخلات وترميز المخرجات عند العرض على النص الأصلي السليم لقاعدة البيانات مع منع حقن HTML في المتصفح.
| الثابت / الدالة | التصنيف | الحالة في PHP 8.4 وأفضل ممارسة |
|---|---|---|
FILTER_VALIDATE_INT | تحقق (Validation) | مدعوم — يدعم خيارات min_range وmax_range وdefault |
FILTER_VALIDATE_IP | تحقق (Validation) | مدعوم — يدعم رايات IPV4 وIPV6 وNO_PRIV_RANGE |
FILTER_VALIDATE_BOOL | تحقق (Validation) | مدعوم — يُقرن مع الراية FILTER_NULL_ON_FAILURE |
filter_input_array() | تحقق جماعي (Batch) | مدعوم — يفحص مصفوفة المدخلات دفعة واحدة وفق مخطط القواعد |
FILTER_SANITIZE_STRING | تعقيم (Sanitization) | مُهمل في PHP 8.1+ — استخدم trim() عند الإدخال وhtmlspecialchars() عند العرض |
<?php
$rawBio = " I love O'Reilly books & <PHP 8.4>! ";
// 1. Input stage: normalize whitespace & validate length
$cleanBio = trim($rawBio);
$isValid = mb_strlen($cleanBio) <= 160;
// 2. Output stage (HTML context): escape safely
$safeHtml = htmlspecialchars($cleanBio, ENT_QUOTES | ENT_SUBSTITUTE, "UTF-8");
echo "Valid ($isValid): $safeHtml\n";
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
تم إيقاف وإلغاء FILTER_SANITIZE_STRING في PHP 8.1+ لأن حذف الوسوم وترميز علامات الاقتباس عند الإدخال يشوه النصوص المشروعة ولا يضمن الحماية الكاملة في كل سياقات العرض. لا تستخدم FILTER_SANITIZE_STRING أبداً في PHP 8.1+ لأنها تطلق تحذير إهمال (Deprecated). بدلاً من ذلك، نظف النص عند الإدخال بـ trim() وتحقق من طوله بـ mb_strlen()، ثم خزّن النص الحقيقي كما هو في قاعدة البيانات. رمّز المخرجات لحماية HTML لحظة العرض فقط داخل القالب عبر htmlspecialchars($text, ENT_QUOTES | ENT_SUBSTITUTE, "UTF-8").