web · 6 دقائق قراءة

كيانات HTML — أي خمسة تهمّ، ومتى

المرجع يسرد أكثر من ألفين. تحتاج خمسة، ومعرفة أيّها الخمسة هي معظم ما يوجد لتعرفه.

الكيان تهريب: طريقة لكتابة محرف كان سيُقرأ ترميزًا لولا ذلك. < تنتج علامة أصغر من دون أن تبدأ وسمًا.

القائمة المنشورة الهائلة أثر تاريخي. معظمها يعود إلى ما قبل أن يصير UTF-8 عامًّا، حين كانت كتابة محرف مباشرةً مقامرة على الترميز.

الخمسة

&lt; و&gt; — القوسان الزاويان. فالعلامة < المجرّدة تبدأ وسمًا، فـif x < 5 مكتوبةً مباشرةً تبتلع بقيّة الجملة داخل عنصر يحاول المتصفّح بعدها أن يفهمه.

&amp; — علامة العطف، لأنها تبدأ كيانًا. فبدونها تتحوّل Q&A وR&D أحيانًا إلى شيء غير مقصود، والروابط التي تحوي &copy= معروفة بإنتاج © في وسط الرابط.

&quot; و&#39; — علامتا الاقتباس، وهما تهمّان داخل قيمة سمة. فسمة title تحوي علامة اقتباس مزدوجة غير مهرَّبة تُنهي السمة مبكرًا، ويصير كل ما بعدها ترميزًا.

تلك هي القائمة الكاملة للمحارف التي تكسر HTML. كل ما عداها اختياري.

ما لم تعد تحتاجه

الحروف ذات الحركات، ورموز العملات، والأسهم، والرموز الرياضية، والحروف اليونانية، والإيموجي. اكتبها مباشرةً وأعلن UTF-8 في أعلى المستند.

&eacute; أصعب قراءةً من é، وأصعب بحثًا، وليست أصحّ. كتابة &rarr; بدل تجعل الشفرة أسوأ مقابل لا شيء.

الاستثناء مسار غير مضمون فعلًا — قالب بريد، أو نظام يشوّه الترميزات، أو ملف لا تتحكّم في ترميز محارفه. هناك تبقى الكيانات الصورة الآمنة، والسبب هو المسار لا HTML.

اثنان ما زالا يستحقّان الكتابة عمدًا

&nbsp; — مسافة لا تنكسر إلى سطر جديد. نافعة بين رقم ووحدته، أو قبل كلمة قصيرة أخيرة تفاديًا لسطر يتيم. تستحق أن تُكتب عمدًا، وتستحق ألّا تدع محرّرًا يدرجها نيابةً عنك، فهي أشيع محرف غير مرئي ينتهي في النص ويكسر البحث.

&shy; — شرطة لَيّنة، تعلّم أين يجوز أن تنكسر كلمة طويلة. نادرًا ما تُحتاج ونافعة فعلًا في أعمدة الألمانية الضيّقة.

التهريب والأمان

تهريب تلك المحارف الخمسة هو سبب أهمّية الكيانات وراء الإخراج الطباعي: فنصّ من مستخدم، مُدرَج في صفحة بلا تهريب، وسمُ سكربت ينتظر أن يعمل.

الجزء الجدير بالفهم أن التهريب الصحيح يتوقّف على أين يحطّ النص. داخل متن HTML، هرّب الخمسة. داخل سمة، هرّبها واضبط السمة بين علامتَي اقتباس دائمًا. داخل كتلة سكربت، تهريب الكيانات هو الأداة الخاطئة تمامًا — فتهريب سلاسل JavaScript قاعدة أخرى. داخل رابط، هو ترميز النسبة المئوية. داخل كتلة أنماط، شيء آخر من جديد.

دالّة تهريب واحدة تُطبَّق في كل مكان طريق معروف إلى ثغرة. استعمل التهريب الواعي بالسياق الذي يوفّره محرّك قوالبك، وهو ما تفعله الأطر الحديثة افتراضيًّا، واحفظ التهريب اليدوي للحالات التي لا تراها.

فكّ الترميز

النص المستخرَج من HTML كثيرًا ما يصل والكيانات سليمة فيه — Q&amp;A بدل Q&A — وأحيانًا مرمَّزًا مرّتين، حيث تعني &amp;amp; أن التهريب جرى مرّتين.

فكّ الترميز يتعامل مع الكيانات المسمّاة، والعددية مثل &#8212;، والستّ عشرية مثل &#x2014; — ثلاث صور للمحرف نفسه، كلها متداولة.

الخلاصة

خمسة محارف تكسر HTML وكل ما عداها اختياري. أعلن UTF-8 واكتب البقيّة مباشرةً. هرّب عند إدراج نصّ غير موثوق، وهرّب للسياق الذي يحطّ فيه بدل اللجوء إلى دالّة واحدة في كل مكان.

أسئلة

أي كيانات HTML أحتاج فعلًا؟

خمسة. &lt; و&gt; للقوسين الزاويين، و&amp; لعلامة العطف نفسها، و&quot; و&#39; لعلامتَي الاقتباس داخل قيم السمات. كل ما عداها في قائمة الألفين موجود للراحة أو لأيام ما قبل UTF-8، لا لأن المحرف يكسر شيئًا.

كيف أعرض علامة أصغر من في HTML؟

اكتب &lt;. فالعلامة < المجرّدة تبدأ وسمًا، فالمتصفّح الذي يقرأ «if x < 5» يعامل كل ما بعدها ترميزًا حتى يجد >. هذا أهمّ الكيانات، وهو الذي ينتج غيابه أغرب صفحة شكلًا.

هل ما زلت أحتاج كيانات للحروف ذات الحركات؟

لا، ما دامت الصفحة تعلن UTF-8. اكتب é مباشرةً. صور الكيانات جاءت من زمن لم يكن يُوثَق فيه بالترميز، واستعمالها اليوم يجعل الشفرة أصعب قراءةً وبحثًا دون أن يجعل شيئًا أصحّ.

ما الفرق بين &amp;nbsp; والمسافة؟

المسافة غير القابلة للكسر تُعرض بالشكل نفسه وتمنع كسر السطر عند تلك النقطة. تنفع بين رقم ووحدته. هي أيضًا أشيع محرف غير مرئي ينتهي في النص من غير قصد، حيث يكسر البحث — فتستحق أن تُستعمل عمدًا بدل ترك المحرّر يدرجها.

هل يمنع تهريب HTML هجمات XSS؟

تهريب المحارف الخمسة عند إدراج نصّ غير موثوق في متن HTML جزء كبير منه، لكنه ليس الجواب كلّه. فالتهريب الصحيح يختلف داخل سمة، وداخل كتلة سكربت، وداخل كتلة أنماط، وداخل رابط — السياق هو الذي يقرّر، ودالّة تهريب واحدة تُطبَّق في كل مكان طريق معروف إلى الخطأ في هذا.

أدوات من هذا الدليل

المزيد من أدوات الويب — كلّها تعمل في متصفّحك، ولا واحدة منها ترفع ملفًّا.