في HTML، تحمل الأحرف < و> و& معنى خاصًا ويجب الهروب منها، لكن النص العربي يضيف تعقيدًا آخر: حتى بعد تحويل الأحرف الخطرة إلى كيانات، يبقى اتجاه العرض (RTL) والتشكيل من العوامل التي تستحق الانتباه عند التعامل مع كيانات HTML.
لماذا لا توجد كيانات مسمّاة للحروف العربية
على عكس بعض الرموز اللاتينية التي لها كيانات مسمّاة مثل é، لا يملك أي حرف عربي كيانًا مسمّى في مواصفة HTML — الحرف "أ" مثلاً لا يُكتب إلا برمزه الرقمي أ. لذلك فإن أي أداة تحوّل نصًا عربيًا إلى كيانات تعتمد كليًا على الترميز الرقمي أو الست عشري، دون أي اختصار مسمّى متاح.
التشكيل: علامات فوق الحرف وتحته
علامات التشكيل مثل الفتحة والضمة والكسرة والشدة هي محارف Unicode مستقلة تُركّب فوق أو تحت الحرف الذي يسبقها. إذا قُطع نص مُرمَّز بكيانات رقمية في نقطة خاطئة، قد ينفصل حرف التشكيل عن الحرف الذي يخصه، فيظهر النص بعد فك الترميز بعلامات تشكيل في غير موضعها الصحيح.
الكيانات المسمّاة والرقمية للترميز الأساسي
يمكن كتابة كيان HTML بطريقتين: بكود مسمّى (<، &، ") أو رقمي (<، &، أو بالصيغة الست عشرية <). يعرض المتصفح كلاهما بنفس الطريقة.
الحد الأدنى من الأحرف الواجب الهروب منها
<←<— لكي لا يبدأ وسم.>←>— لإغلاق النص بشكل صحيح بعد وسم.&←&— لكي لا تُقرأ & كبداية كيان آخر."و'←"،'— إلزامي داخل قيم السمات بين علامات اقتباس.
محارف التحكّم في الاتجاه (LRM وRLM)
عند مزج نص عربي مع أرقام أو كلمات إنجليزية داخل سطر واحد، قد يعرض المتصفح الترتيب البصري بشكل غير متوقع. تُستخدم كيانات مثل ‏ (علامة اتجاه من اليمين لليسار) و‎ (من اليسار لليمين) لفرض اتجاه عرض صريح حول رقم أو كلمة أجنبية داخل جملة عربية، دون التأثير على معنى النص نفسه.
العلاقة بثغرات XSS
تنشأ معظم ثغرات XSS تحديدًا لأن النص الذي يُدخله المستخدم يُدرَج في HTML دون الهروب منه. عرض "<script>...</script>" دون تحويله إلى كيانات سيجعل المتصفح يُنفّذه كأنه كود. الهروب من الأحرف هو إجراء حماية أساسي — لكنه ليس الوحيد.
السياق مهم: النص مقابل السمة
الهروب من < و> و& كافٍ للنص الواقع بين الوسوم، لكن داخل قيمة سمة محاطة بعلامات اقتباس يجب أيضًا الهروب من نوع علامة الاقتباس المستخدم تحديدًا — مزدوجة كانت أم مفردة.