ترميز وفك ترميز كيانات HTML
حوّل النص إلى كيانات HTML آمنة أو فكّها فوراً — أداة مجانية للمطورين.
نصّك يبقى على جهازك
لا شيء لحذفه لاحقاً
آمنة لبيانات مستخدمين حقيقية
تعمل في كل متصفح حديث
كيف تعمل
- 1
ألصق نصّك
نصّاً فيه أقواس زاوية أو علامة عطف أو علامات تنصيص أو حروف مشكولة يلزم وضعه داخل وسوم.
- 2
اختر السياق
متناً، أو قيمة سمة، أو ترميزاً كاملاً — لكلٍّ منها مجموعة محارف مختلفة تُحمى.
- 3
انسخ الناتج
ألصقه في قالب، أو مستند XML، أو تغذية، أو متن بريد.
لماذا تستخدم هذه الأداة
السياق اختيار لا تخمين
الحماية للمتن وللقيمة داخل سمة وللرابط أعمال مختلفة، وأنت من يحدّد أيّها.
الترميز المزدوج يُلتقط
يُنبَّه على مدخلٍ يحوي كيانات أصلاً، فلا تحوّل علامة العطف إلى كيانها مرتين.
مخرَج بالاسم أو بالرقم
المراجع الرقمية تعمل في XML والتغذيات وSVG، حيث معظم الكيانات المسمّاة غير معرَّفة أصلاً.
فكّ آمن ذهاباً وإياباً
تُعرَف الصيغتان المسمّاة والرقمية، ومنها الكتابة الستّ عشرية والكيانات بلا فاصلة منقوطة.
صدق في حدود ما تفعله الحماية
تجعل نصّاً آمن الوضع في سياق، وهذه دعوى أصغر من جعل وسوم غير موثوقة آمنة.
لا شيء يفارق المتصفح
يُحوَّل النصّ في هذه الصفحة، فمحتوى التذاكر وأسماء العملاء التي تجرّب بها تبقى لك.
ليس ثمّة «حماية لـHTML» واحدة — السياق هو الذي يقرّر
هذه الفكرة هي التي تجعل بقية الموضوع مفهومة. يحلّل المتصفح المستند في حالات عدّة مختلفة، والمحارف القادرة على إنهاء الحالة الجارية تختلف في كل حالة. داخل المتن، لا يبدأ شيئاً جديداً إلا `<` و`&`، فهما المحرفان اللذان يلزم حمايتهما. وداخل قيمة سمة محصورة بعلامتَي تنصيص مزدوجتين، تكون `<` غير ضارّة وتكون `"` قاتلة، لأن علامة التنصيص تُنهي السمة. وداخل قيمة سمة بلا تنصيص، تُنهيها مسافة، وكذلك جدولة وسطر جديد وعلامة اقتباس مائلة وعلامة يساوٍ وقوس زاوية مغلق. وداخل كتلة `<script>` لا تفعل حماية HTML شيئاً نافعاً البتّة، والمطلوب حماية نصوص JavaScript. لهذا فدالّة `escape()` واحدة تُطبَّق في كل مكان تُنتج مخرجات معطوبة وثغرات حقيقية معاً: تزيد الحماية حيث كانت المحارف آمنة، وتنقصها حيث لم تكن. واختيار السياق قبل الترميز ليس لطفاً زائداً — بل هو القرار كلّه.
حفنة محارف وحدها هي التي يلزم تغييرها
يجدر أن تعرف كم القائمة قصيرة، لأن أكثر الإفراط في الحماية مصدره الجهل بذلك. المحارف ذات المعنى النحوي في HTML هي `<` و`>` و`&` و`"` والفاصلة العليا. ومنها `&` تلزم حمايتها دائماً لأنها تبدأ كياناً، و`<` تلزم حمايتها دائماً لأنها تبدأ وسماً. أما `>` ففي المتن مجاملة لا فريضة — يعرض المتصفح `>` مجرّدةً بلا مشكلة — وإن جرت العادة بحمايتها في معظم قواعد الكود لأنها لا تكلّف شيئاً وتنفع حين تعالج الوسوم لاحقاً أداةٌ أشدّ تشدّداً. وعلامتا التنصيص لا تهمّان إلا داخل قيم السمات، ولا تهمّ منهما إلا التي استخدمتها فاصلاً. وما عدا ذلك — كل حرف مشكول، وكل حرف عربي أو صيني، وكل رمز تعبيري — لا يحتاج حمايةً البتّة في مستند UTF-8: الترميز يتكفّل بها. وتحويل `café` إلى `café` جائز وعديم الجدوى غالباً، ويكبّر ملفك ويُصعّب البحث فيه.
العربية مرمَّزةً بالكامل: عادةٌ موروثة تُكلّف ولا تُفيد
ثمّة نمطٌ يظهر في مشاريعنا العربية أكثر من غيرها، ويستحقّ تسميته. أنظمة قديمة كثيرة — منتديات ولوحات تحكّم ومصدّرات محتوى كُتبت قبل أن يصير UTF-8 هو الافتراض — كانت تُخرج النصّ العربي كمراجع رقمية بالكامل، فتصير كلمة «مرحبا» سلسلةً من `مرحبا`. كان لذلك مبرّر يوم كانت الصفحات تُقدَّم بترميز windows-1256 أو ISO-8859-6 ولم يكن يُوثَق بأن العميل سيقرأ الترويسة قراءةً صحيحة. أما اليوم فهو خسارة صافية: يتضخّم الملف نحو ستّة أضعاف حجم النصّ العربي فيه، ويتعطّل البحث النصّي في قاعدة البيانات لأن ما هو مخزَّن ليس الحروف، ويعجز التدقيق الإملائي، ولا يستطيع قارئ الشاشة أن يقرأ ما لم يُفَكّ ترميزه بعد. والصواب أن تُصرّح `<meta charset="utf-8">` وتكتب الحروف كما هي. هذه الأداة تفكّ تلك المراجع لتستعيد نصّك، وتَعرض الترميز الكامل خياراً صريحاً حين تُجبِرك عليه منظومة قديمة، لا سلوكاً افتراضياً.
الترميز المزدوج هو العلّة التي وُجدت هذه الأداة لمنعها
الحماية ليست عملية يستوي تكرارها، ونسيان ذلك يُنتج أشهر عيوب الويب. رمّز `&` مرةً فتحصل على `&`. رمّز الناتج ثانيةً فتحصل على `&amp;`، وهو ما يُعرَض على الصفحة نصّاً حرفياً هكذا: `&`. وقد رأيته: عناوين صفحات تقرأ «طوم & جيري»، وأسطر موضوع في بريد فيها `'` وسط كلمة، وأسماء منتجات تحيط بها `"` في نتائج البحث. يحدث ذلك لأن الحماية طُبّقت في طبقتين لا تعرف إحداهما بالأخرى — محرّك قوالب يحمي تلقائياً، ومتحكّمٌ حمى احتياطاً قبل تسليم النصّ. والعلاج ألّا تحمي مرتين أبداً، وسبيل اليقين أن تحمي مرةً واحدة بالضبط، في آخر لحظة ممكنة، عند النقطة التي يدخل فيها النصّ إلى الوسوم. وكل ما يُخزَّن محميّاً في قاعدة بيانات سيُحمى ثانيةً في النهاية على يد ما يعرضه.
الكيانات المسمّاة خاصّية في HTML لا خاصّية في النصّ
تعرّف HTML5 أكثر من ألفي كيان مسمّى، من ` ` و`©` المألوفين إلى أشياء مثل `⨂`. أما XML فتعرّف خمسةً بالضبط: `<` و`>` و`&` و`"` و`'`. وهذه الفجوة تُسبّب فشلاً محدّداً وشائعاً. ضع ` ` في تغذية RSS أو ملف SVG أو مستند XHTML أو تخطيط أندرويد أو حمولة SOAP فتحصل على خطأ تحليل، لأن المحلِّل لم يسمع به قطّ، والكيان غير المعرَّف قاتلٌ في XML لا مُتجاهَل. والصيغة الرقمية ` ` تعمل في كل مكان، إذ لا تحتاج تعريفاً. وثمّة فخّ مقابل في الاتجاه الآخر: `'` من خمسة XML لكنه لم يكن في HTML4، فتعرضه مستندات HTML القديمة وبعض عملاء البريد نصّاً حرفياً. فإن كان نصّك قد يسافر بين الصيغ — ومعظم النصوص في منظومة حديثة تسافر — فالمراجع الرقمية هي الكتابة الآمنة.
الحماية ليست تعقيماً، والفرق مهمّ
يُخلَط بين هذين خلطاً دائماً، ومن هذا الخلط تنشأ ثغرات الحقن. الحماية تأخذ نصّاً فتجعله آمن الوضع في سياق بعينه، ليُعرَض لا ليُفسَّر. أما التعقيم فيأخذ وسوماً يُراد لها أن تبقى وسوماً فينزع منها الخطر. حماية تعليقٍ قبل طباعته صواب؛ وحماية حقلٍ غنيّ يُسمح للمستخدم بتنسيقه تُتلف التنسيق، والاستجابة المعتادة — تمرير الوسوم بلا حماية — هي ما يفتح الثغرة فعلاً. وأحدّ مثال على الفرق رابط: رمّز رابطاً بالكيانات فينجو `javascript:alert(1)` سليماً تماماً، لأن فكّ الكيانات يقع قبل فحص مخطّط الرابط، فتصير `javascript:` هي `javascript:` وتُنفَّذ. ولا قدر من حماية HTML يقي سمة `href`؛ ولا يقيها إلا التحقّق من المخطّط. الحماية تحلّ مشكلة واحدة بالضبط، ومعرفة أيّها هي المقصد.
أخطاء شائعة يجب تجنّبها
- استعمال دالّة حماية واحدة في كل مكان. المتن وقيم السمات وكتل النصوص البرمجية تنتهي بمحارف مختلفة، فدالّةٌ واحدة تفرط في موضع وتقصّر في آخر.
- حماية النصّ نفسه مرتين. الحماية لا يستوي تكرارها — تصير `&` هي `&` ثم `&amp;`، ولهذا تُقرأ عناوين الصفحات «طوم & جيري».
- ترميز العربية كاملةً بمراجع رقمية. عادةٌ موروثة من زمن windows-1256 تُضخّم الملف وتُعطّل البحث في قاعدة البيانات؛ والصواب `<meta charset="utf-8">` والحروف كما هي.
- وضع كيانات مسمّاة في XML. لا يُعرَّف هناك إلا خمسة، فـ` ` خطأ تحليل قاتل في تغذية أو SVG أو XHTML؛ و` ` يعمل في كل مكان.
- الوثوق بأن ترميز الكيانات يجعل رابطاً آمناً. تُفَكّ الكيانات قبل فحص المخطّط، فتصير `javascript:` هي `javascript:` وتُنفَّذ؛ ولا ينفع إلا التحقّق من المخطّط.
كيف تُقارن
| الجانب | هذه الأداة | مرمِّزات عبر الويب | مكتبة في لغة برمجة |
|---|---|---|---|
| إرسال النصّ إلى خادم | أبداً | غالباً نعم | لا |
| تتيح اختيار السياق | نعم | نادراً | غالباً |
| تُنبّه على الترميز المزدوج | نعم | لا | لا |
| مخرَج رقمي لـXML | نعم | أحياناً | قابل للضبط |
| تفكّ مجموعة HTML5 المسمّاة كاملة | نعم | جزئياً | غالباً |
| السعر | مجاناً | مجاني / خطط مدفوعة | مجاناً |
المزايا
ترميز وفكّ
الاتجاهان معاً، فتفحص ما أنتجه نظامٌ بالسهولة نفسها التي تُعِدّ بها ما أنت مرسله.
ترميز أدنى أو كامل
احمِ المحارف التي يقتضيها السياق وحدها، أو كل محرف خارج ASCII، بحسب وجهة النصّ.
دعم الكيانات المسمّاة
تُعرَف مجموعة HTML5 المسمّاة كاملةً عند الفكّ، ومنها الذيل الطويل الذي لا يكتبه أحد يدوياً.
ستّ عشري وعشري
تُقرأ المراجع الرقمية وتُكتب بالصيغتين، لأن المستندات الحقيقية تحوي الاثنتين.
كشف الترميز المزدوج
تُبرَز الكيانات الموجودة في المدخل قبل أن ترمّزها مرة ثانية.
يستوعب المدخلات الكبيرة
يُحوَّل قالب كامل أو تصدير طويل دون رفع ودون سقف حجم.
لا شيء لتثبيته
لا أداة بناء ولا بيئة تشغيل ولا تبعيات — تعمل في صفحة الويب.
جاهزة للعربية وRTL
الواجهة كاملة بثماني لغات، ومنها العربية من اليمين إلى اليسار.
آمنة بالأصل
تُقدَّم عبر HTTPS، بلا تتبّع للمحتوى وبلا رفع إلى طرف ثالث.
من يستخدمها
مطوّرو الويب
فحص كيف يسلك نصّ بعد أن يصير داخل قيمة سمة.
مطوّرو البريد
إعداد أسطر الموضوع ونصّ المتن لعملاء بريد تحلّل بتشدّد.
كتّاب التوثيق التقني
عرض أمثلة كود في صفحة دون أن يحاول المتصفح تنفيذها.
من يطارد نصّاً مشوّهاً
فكّ نصٍّ وصل وفي وسطه `&amp;`.
الأسئلة الشائعة
لا. كل شيء يعمل محلياً في متصفحك — نصّك لا يُرفع أو يُخزَّن أو يُشارَك أبداً.
نعم — مجاني تماماً، بلا حساب وبلا حدود.