أفلت وفكّ إفلات كيانات HTML. حوّل < > & " ' إلى كيانات مسماة، واختياريًا شفّر جميع الأحرف غير ASCII، وفكّك المراجع المسماة أو الرقمية إلى نص.
أفلت النص ليكون آمنًا داخل HTML، أو أعد الكيانات إلى أحرف. اكتب في أي من المربعين للتحويل في ذلك الاتجاه. الوضع الأدنى يفلت فقط الأحرف الخمسة المهمة للصحة؛ الوضع الموسع يشفّر أيضًا كل حرف غير ASCII لتحقيق أقصى توافق.
يقرأ محلل HTML الرمز < كبداية وسم و& كبداية مرجع كيان. إذا كان المحتوى يحتوي على أي منهما، يتوقف المحلل عن معاملته كنص. يستبدل الإفلات الحرف بمرجع يحلّه المحلل عائدًا إلى الشكل الأصلي دون أن يمنحه أي معنى بنيوي.
فقط خمسة أحرف تحتاج فعلًا إلى الإفلات في HTML:
يصبح & هو & — يجب أن يكون أولاً، وإلا ستضاعف إفلات كل شيء آخر
يصبح < هو <
يصبح > هو >
تصبح " هي " — مطلوبة داخل قيم السمات المزدوجة الاقتباس
يصبح ' هو ' — مطلوب داخل قيم السمات المفردة الاقتباس
في نص العنصر تحتاج صراحةً فقط إلى & و<. تهم الثلاثة الأخرى بمجرد أن يصل نصك إلى داخل سمة، وبما أنك نادرًا ما تتحكم في ذلك في نقطة الإفلات، فإن إفلات الخمسة جميعًا هو العادة الآمنة.
المراجع المسماة والعشرية والست عشرية
يمكن كتابة الحرف نفسه بثلاث طرق. المسافة غير المنكسرة هي أو   أو  . المراجع المسماة هي الأكثر قابلية للقراءة لكن قائمة HTML5 تضم نحو 2200 إدخال والمحللات الأقدم تعرف عددًا أقل بكثير، لذا فالأسماء الغامضة خطر على قابلية النقل. تعمل المراجع الرقمية مع أي نقطة كود Unicode وهي آمنة دائمًا. يتطلب كل مرجع مسمّى في HTML5 الفاصلة المنقوطة النهائية؛ وما زالت حفنة من الأسماء القديمة مثل & تُحلل دونها للتوافق مع الإصدارات السابقة، لكن الاعتماد على ذلك خطأ ينتظر الحدوث.
الإفلات ليس تطهيرًا
الإفلات هو ما يوقف البرمجة النصية عبر المواقع: إذا أُفلت إدخال مستخدم يحتوي على <script> إلى <script>، يعرض المتصفح النص الحرفي ولا ينفذ شيئًا. لكن الإفلات لا يعمل إلا إذا حدث في السياق الصحيح. إفلات HTML ليس كافيًا داخل كتلة <script> أو داخل سمة style أو في رابط — كل واحد من تلك يحتاج ترميزه الخاص. ويجب تطبيق الإفلات مرة واحدة عند لحظة الإخراج. الإفلات عند الإدخال ومرة أخرى عند الإخراج ينتج &lt; وهراءً مرئيًا.
متى تحتاج الوضع الموسع
لا يتطلب أي مواصفة حديثة إفلات الأحرف غير ASCII. يمكن لمستند UTF-8 أن يحتوي على é و中 مباشرة، وعادةً يكون ذلك الخيار الأفضل: أقصر وأسهل قراءة وأسهل بحثًا. الوضع الموسع موجود للحالات التي يجب أن تعبر فيها سلسلة البايتات قناة تُفسد غير ASCII — بعض قوالب البريد القديمة وحقول CMS الأقدم وخطوط أنابيب XML بترميز معلن غير واضح أو خطوة بناء عالقة في Latin-1. إذا كنت تتحكم في الترميز من البداية إلى النهاية، فابقَ في الوضع الأدنى.
فخ المسافة غير المنكسرة
هي U+00A0، حرف مختلف عن المسافة العادية U+0020. تمنع كسر السطر وتمنع المتصفحات من طيّ سلاسل المسافات، ولهذا تصدرها محررات WYSIWYG بحرية. ولأنها تبدو متطابقة، فهي تكسر بصمت مقارنات السلاسل والتعبيرات النمطية المكتوبة بـ\s في بعض المحركات واستيرادات CSV. إذا بدت القيمة صحيحة لكنها ترفض التطابق، فتحقق من وجود مسافة غير منكسرة شاردة.
الأسئلة الشائعة
هل يجب أن أفلت علامة أكبر من؟
لا صراحةً — > منفردة في النص لا لبس فيها وتُحلل جيدًا. تُفلت حسب الاصطلاح لأنها لا تكلف شيئًا وتتجنب الالتباس في الترميز المولّد، لا سيما عندما تُعالج المخرجات لاحقًا بأدوات أكثر صرامة من المتصفح.
لماذا يجب إفلات & أولاً؟
لأن كل تسلسل إفلات آخر يبدأ بعلامة عطف. إذا استبدلت < بـ< قبل إفلات &، فسيحول المرور التالي تلك العلامة إلى & وتنتهي بـ &lt; في الصفحة.
هل الإفلات كافٍ لمنع XSS؟
فقط لنصوص HTML وسياقات السمات، وفقط عند تطبيقه عند الإخراج. المحتوى المحقون في JavaScript أو CSS أو رابط يحتاج قواعد إفلات تلك اللغة بدلاً من ذلك. الإفلات طبقة واحدة، وليس دفاعًا كاملًا.
الكيانات المسماة أو الرقمية — أيها يجب أن أستخدم؟
المراجع الرقمية مدعومة عالميًا وتعمل مع أي نقطة كود. المراجع المسماة أكثر قابلية للقراءة للقلة التي يعرفها الجميع. عمليًا استخدم المسماة للأحرف الخمسة الأساسية والرقمية لأي شيء غير عادي.
هل يجب أن أشفّر الأحرف المشكّلة؟
ليس في مستند UTF-8، وهو أساسًا كل محتوى الويب الحديث. اكتبها مباشرة. استخدم الوضع الموسع فقط عندما لا يمكن الوثوق بشيء في خط أنابيبك بحمل بايتات غير ASCII سليمة.
ما الفرق بين والمسافة العادية؟
المسافة غير المنكسرة هي نقطة الكود U+00A0. تبدو نفسها لكنها تمنع التفاف السطر ولا تُطوى مع المسافات المجاورة. وهي أيضًا حرف مميز لأغراض المقارنة، مما يجعلها مصدرًا شائعًا لأخطاء خفية.