ترميز الأحرف في لغة HTML
على الرغم من استخدام لغة ترميز النص التشعبي ( HTML ) منذ عام 1991، إلا أن الإصدار 4.0 الصادر في ديسمبر 1997 كان أول إصدار موحد يُعالج الأحرف الدولية بشكل كامل تقريبًا. عندما يتضمن مستند HTML أحرفًا خاصة خارج نطاق ASCII ذي السبعة بتات، يجدر مراعاة هدفين: سلامة المعلومات ، وعرضها بشكل متوافق مع جميع المتصفحات .
في الإصدار 5.3 من مواصفات W3C التي تم إيقافها الآن، والمعيار الحي الحالي الذي نشرته WHATWG، فإن الترميز الصالح الوحيد هو UTF-8 . [ 1 ] [ 2 ]
تحديد ترميز الأحرف للمستند
هناك طريقتان عامتان لتحديد ترميز الأحرف المستخدم في المستند.
أولاً، يمكن لخادم الويب تضمين ترميز الأحرف أو " charset" في رأس بروتوكول نقل النص التشعبي (HTTP) Content-Type، والذي سيبدو عادةً على النحو التالي: [ 3 ]
نوع المحتوى: نص/html؛ ترميز الأحرف: utf-8تتيح هذه الطريقة لخادم HTTP وسيلة ملائمة لتغيير ترميز المستند وفقًا لمفاوضات المحتوى ؛ ويمكن لبعض برامج خادم HTTP القيام بذلك، على سبيل المثال Apache مع الوحدة النمطيةmod_charset_lite . [ 4 ]
ثانياً، يمكن تضمين إعلان داخل المستند نفسه.
بالنسبة لـ HTML، من الممكن تضمين هذه المعلومات داخل العنصر الموجود headبالقرب من أعلى المستند: [ 2 ]
< meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" >يسمح HTML5 أيضًا بأن يكون للصيغة التالية نفس المعنى تمامًا: [ 2 ]
< meta charset = "utf-8" >تتوفر في مستندات XHTML خيار ثالث: وهو التعبير عن ترميز الأحرف عبر إعلان XML ، كما يلي: [ 5 ]
<?xml version="1.0" encoding="utf-8"?>في هذا النهج الثاني، ولأن ترميز الأحرف لا يمكن معرفته إلا بعد تحليل التصريح، تبرز مشكلة في تحديد ترميز الأحرف المستخدم في المستند حتى التصريح نفسه. إذا كان ترميز الأحرف امتدادًا لـ ASCII ، فيجب أن يكون المحتوى حتى التصريح نفسه ASCII خالصًا، وسيعمل هذا بشكل صحيح. أما بالنسبة لترميزات الأحرف التي ليست امتدادات لـ ASCII (أي ليست مجموعة شاملة لـ ASCII)، مثل UTF-16BE و UTF-16LE ، فينبغي أن يكون معالج HTML، مثل متصفح الويب، قادرًا على تحليل التصريح في بعض الحالات باستخدام أساليب استدلالية.
على الرغم من أن لغة HTML المكتوبة وفقًا لمعيار Living Standard الحالي تتطلب أن تكون بتنسيق UTF-8، إلا أنه لا يزال من الضروري تحديد ترميزها، بأي من الصيغ المذكورة أعلاه. يجب أن يكون هذا الترميز مطابقًا للسلسلة "utf-8" بغض النظر عن حالة الأحرف، ويجب أن يكون المستند نفسه بتنسيق UTF-8. [ 2 ] [ 1 ]
خوارزمية الكشف عن الترميز
تم تعريف "خوارزمية استشعار الترميز" في المواصفات لتحديد ترميز الأحرف في المستند بناءً على مصادر إدخال متعددة، بما في ذلك:
- تعليمات واضحة للمستخدم
- علامة تعريفية صريحة ضمن أول 1024 بايت من المستند
- علامة ترتيب البايتات (BOM) ضمن البايتات الثلاثة الأولى من المستند
- نوع محتوى HTTP أو معلومات طبقة النقل الأخرى
- تحليل بايتات المستند بحثًا عن تسلسلات أو نطاقات محددة من قيم البايت، [ 6 ] وآليات الكشف التجريبية الأخرى.
قد تظهر الأحرف خارج نطاق ASCII القابل للطباعة (من 32 إلى 126) بشكل غير صحيح إذا تم عرض المستند بترميز أحرف غير صحيح. لا يُمثل هذا مشكلة تُذكر لمستخدمي اللغة الإنجليزية ، ولكن اللغات الأخرى تتطلب عادةً - وفي بعض الحالات دائمًا - أحرفًا خارج هذا النطاق. في بيئات اللغات الصينية واليابانية والكورية ( CJK )، حيث تُستخدم عدة ترميزات متعددة البايتات، غالبًا ما يتم استخدام خاصية الكشف التلقائي. أخيرًا، تسمح المتصفحات عادةً للمستخدم بتجاوز تسمية ترميز الأحرف غير الصحيحة يدويًا.
يُعدّ ترميز UTF-8 الترميز الأكثر شيوعًا للأحرف على الإنترنت منذ عام 2008، ويعود ذلك جزئيًا إلى أنه، كونه ترميزًا لليونيكود ، يسمح باستخدام نفس الترميز لجميع اللغات. اعتبارًا من يناير 2026 يستخدم ترميز UTF-8 في 98.9% من مواقع الويب التي شملها استطلاع W3Techs. [ 7 ] أما ترميز UTF-16 أو UTF-32 ، وهما ترميزات أخرى لليونيكود، فهما أقل استخدامًا نظرًا لصعوبة التعامل معهما في لغات البرمجة التي تفترض ترميزًا شاملاً لمجموعة ASCII موجهًا نحو البايت ، كما أنهما أقل كفاءة للنصوص التي تحتوي على نسبة عالية من أحرف ASCII، وهو ما ينطبق عادةً على مستندات HTML.
لا يُعدّ عرض الصفحة بنجاح دليلاً بالضرورة على صحة ترميزها. فإذا كان كلٌّ من مُنشئ الصفحة وقارئها يعتمدان على ترميز أحرف خاص بالمنصة، ولم يُرسل الخادم أي معلومات تعريفية، فسيرى القارئ الصفحة كما أرادها مُنشئها، بينما لن يراها القراء الآخرون على منصات مختلفة أو بلغات أصلية مختلفة.
الترميزات المسموح بها
الإصدار 5.3 من معيار W3C المتقاعد والإصدار الحالي ( اعتبارًا من عام 2026)يشترط معيار WHATWG Living Standard استخدام ترميز UTF-8. ولا يُعتبر أي ترميز آخر صالحًا. [ 1 ] [ 2 ] ومع ذلك، يجب على التطبيقات استخدام خوارزمية استشعار الترميز لتحديد الترميز المناسب للمستند، وفقًا لمبدأ المتانة .
يحدد معيار ترميز WHATWG ، المشار إليه في كلا المعيارين، قائمةً بالترميزات التي يجب أن تدعمها المتصفحات. وتحظر معايير HTML دعم أي ترميزات أخرى. [ 8 ] [ 9 ] [ 10 ] وينص معيار الترميز كذلك على أنه يجب على التنسيقات الجديدة والبروتوكولات الجديدة (حتى عند استخدام التنسيقات الحالية) ومؤلفي المستندات الجديدة استخدام UTF-8 حصريًا. [ 11 ]
إلى جانب UTF-8، تم إدراج الترميزات التالية بشكل صريح في معيار HTML نفسه، مع الإشارة إلى معيار الترميز: [ 10 ]
- 1 2 3 4 محذوف من إصدار W3C 5.3.
- ↑ تم تحديده أيضًا لـ
TIS-620،ISO-8859-11والعلامات ذات الصلة. [ 11 ] - ↑ تم تحديده أيضًا لـ
ASCII،ISO-8859-1والعلامات ذات الصلة. [ 11 ] - ↑ كما تم تحديدها
ISO-8859-9للعلامات ذات الصلة. [ 11 ] - ↑ تم تحديده باستخدام 0xA3A0 كترميز مكرر للمسافة التصويرية (U+3000) لأسباب تتعلق بالتوافق، وبالتالي يستثني U+E5E5 (حرف للاستخدام الخاص). [ 12 ] [ 13 ] كما تم تحديده باستخدام 0x80 المقبول كترميز بديل لعلامة اليورو (U+20AC؛ انظر Windows-936 ). [ 14 ] بخلاف ذلك، يتبع عمليات الربط من معيار 2005. [ 13 ]
- ↑ متغير مجموعة الأحرف التكميلية لهونغ كونغ ، [ 15 ] على الرغم من أن معظم امتدادات HKSCS (تلك التي تحتوي على بايتات بادئة أقل من 0xA1) لا يتم تضمينها بواسطة المُشفِّر، بل بواسطة المُفكِّك فقط. [ 16 ]
- ↑ تتضمن المواصفاتملحقات IBM و NEC ، [ 17 ] وهي على وجه التحديد Windows-31J . [ 15 ]
- ↑ يستخدم هذا المعيار نفس الفهرس المستخدم في Shift JIS (بقدر الإمكان)، أي أنه يشمل امتدادات NEC.يقوم المُشفِّر بتحويل أحرف الكانا ذات العرض النصفي إلى أحرف كاملة العرض، [ 18 ] ولكن يتم قبولها باستخدام تسلسل هروب (ESC 0x28 0x49) بواسطة المُفكِّك. [ 19 ] تم استبعاد Shift Out و Shift In (0x0E و0x0F) تمامًا لمنع الهجمات. [ 19 ] [ 20 ]
- ↑ في الواقع، هو رمز الهانغول الموحد (Windows-949)، وهو مجموعة شاملة تغطي كتلة مقاطع الهانغول بأكملها . [ 15 ] [ 21 ]
- ↑ مخصص لفك التشفير فقط؛ يجب ترميز عمليات إرسال النماذج من المستندات المشفرة بـ UTF-16 باستخدام UTF-8 . [ 22 ]
- ↑ لضمان التوافق مع المحتوى المنشور، والمحدد أيضًا للتسمية العادية
UTF-16، [ 23 ] مع العلم أن علامة ترتيب البايتات (BOM)، إن وجدت، لها الأولوية على أي تسمية. [ 24 ] مُحدد لفك التشفير فقط؛ يجب ترميز نماذج الإرسال من المستندات المشفرة بـ UTF-16 باستخدام UTF-8 . [ 22 ] - ↑ تُحوّل هذه الخريطة النطاقات من 0x00 إلى 0x7F إلى النطاقات من U+0000 إلى U+007F، ومن 0x80 إلى 0xFF إلى النطاقات من U+F780 إلى U+F7FF ( نطاق منطقة الاستخدام الخاص )، بحيث تتطابق البتات الثمانية الأدنى من نقطة الترميز دائمًا مع البايت الأصلي. [ 25 ]
تم إدراج الترميزات الإضافية التالية في معيار الترميز، وبالتالي فإن دعمها مطلوب أيضًا: [ 11 ]
- ↑ يستخدم نفس المشفر والمفكك المستخدم في معيار ISO-8859-8، ولكنه لا يخضع لسلوك الترتيب المرئي المستخدم في المستندات المصنفة على أنها ISO-8859-8. [ 26 ]
- ↑ يحمل اسم KOI8-U ومحدد لكل من
KOI8-UالتسمياتKOI8-RU؛ [ 11 ] يتبع KOI8-RU في الموضعين 0xAE و0xBE (أي يتضمن Ў/ў ) [ 27 ] [ 28 ] ولكن KOI8-U في المواضع 0x93–9F. [ 27 ] - ↑ تم تحديده أيضًا
GB2312للتسميات ذات الصلة. يتم التعامل معه بنفس طريقة GB 18030 لأغراض فك التشفير. [ 29 ] لأغراض التشفير، فإن التسمية بـ GBK (أو GB 2312 ) تستبعد الرموز المكونة من أربعة بايتات، وتفضل تمثيل البايت الواحد 0x80 لـ U+20AC. [ 12 ] - ↑ يستخدم هذا المعيار نفس الفهرس المستخدم في Shift JIS (بقدر ما يكون ضمن نطاق مجموعة رموز EUC 1)، أي أنه يشمل امتدادات NEC. تم تضمين JIS X 0212 لفك التشفير فقط. [ 30 ]
تُدرج الترميزات التالية كأمثلة صريحة على الترميزات المحظورة: [ 10 ]
The standard also defines a "replacement" decoder, which maps all content labelled as certain encodings to the replacement character (�), refusing to process it at all. This is intended to prevent attacks (e.g. cross site scripting) which may exploit a difference between the client and server in what encodings are supported in order to mask malicious content.[31] Although the same security concern applies to ISO-2022-JP and UTF-16, which also allow sequences of ASCII bytes to be interpreted differently, this approach was not seen as feasible for them since they are comparatively more frequently used in deployed content.[32] The following encodings receive this treatment:[33]
Character references
In addition to native character encodings, characters can also be encoded as character references, which can be numeric character references (decimal or hexadecimal) or character entity references. Character entity references are also sometimes referred to as named entities, or HTML entities for HTML. HTML's usage of character references derives from SGML.
HTML character references
A numeric character reference in HTML refers to a character by its Universal Character Set/Unicodecode point, and uses the format
&#nnnn;or
&#xhhhh;where nnnn is the code point in decimal form, and hhhh is the code point in hexadecimal form. The x must be lowercase in XML documents. The nnnn or hhhh may be any number of digits and may include leading zeros. The hhhh may mix uppercase and lowercase, though uppercase is the usual style.
Not all web browsers or email clients used by receivers of HTML documents, or text editors used by authors of HTML documents, will be able to render all HTML characters. Most modern software is able to display most or all of the characters for the user's language, and will draw a box or other clear indicator for characters they cannot render.
بالنسبة للرموز من 0 إلى 127، وهي مجموعة معيار ASCII الأصلية ذات 7 بتات ، يمكن استخدام معظم هذه الأحرف دون الحاجة إلى مرجع حرفي. أما الرموز من 160 إلى 255، فيمكن إنشاؤها باستخدام أسماء كيانات الأحرف . لا يمكن إنشاء سوى عدد قليل من الرموز ذات الأرقام الأعلى باستخدام أسماء الكيانات، ولكن يمكن إنشاء جميعها باستخدام مرجع حرفي عشري.
يمكن أن تتخذ مراجع كيانات الأحرف أيضًا تنسيقًا يكون فيه الاسم سلسلة أبجدية رقمية حساسة لحالة الأحرف. على سبيل المثال، يمكن ترميز "λ" أيضًا في مستند HTML. مراجع كيانات الأحرف < و < و < مُعرّفة مسبقًا في HTML وSGML، لأن < و < و < تُستخدم بالفعل لفصل الترميز. والجدير بالذكر أن هذا لم يشمل كيان XML (') قبل HTML5 . للاطلاع على قائمة بجميع مراجع كيانات الأحرف المُسماة في HTML، بالإضافة إلى الإصدارات التي تم تقديمها فيها، راجع قائمة مراجع كيانات الأحرف في XML وHTML .&name;λ<>"&<>"&'
قد يؤدي الاستخدام غير الضروري لمراجع الأحرف في لغة HTML إلى تقليل قابلية قراءة صفحات الويب بشكل ملحوظ. إذا تم اختيار ترميز الأحرف لصفحة الويب بشكل مناسب، فعادةً ما تكون مراجع الأحرف في HTML مطلوبة فقط لأحرف الفصل في علامات الترميز كما ذُكر سابقًا، ولبعض الأحرف الخاصة (أو لا حاجة لها على الإطلاق في حال استخدام ترميز Unicode أصلي مثل UTF-8 ). كما أن استخدام رموز HTML بشكل غير صحيح قد يُعرّض الموقع لثغرات أمنية تسمح بهجمات الحقن مثل البرمجة النصية عبر المواقع . إذا تُركت سمات HTML بدون علامات اقتباس، فيجب استخدام رموز لتهريب بعض الأحرف، وأهمها المسافات البيضاء ، مثل المسافة وعلامة الجدولة. توجد لغات أخرى مرتبطة بلغة HTML لها طرقها الخاصة لتهريب الأحرف.
مراجع أحرف XML
على عكس لغة HTML التقليدية التي تحتوي على نطاق واسع من مراجع كيانات الأحرف، لا يوجد في لغة XML سوى خمسة مراجع محددة مسبقًا لكيانات الأحرف. تُستخدم هذه المراجع لتهريب الأحرف الحساسة للعلامات في سياقات معينة: [ 34 ]
| مرجع | شخصية | اسم | نقطة الترميز |
|---|---|---|---|
& | و | علامة العطف (&) | U+0026 |
< | < | علامة أقل من | U+003C |
> | > | علامة أكبر من | ش+003ه |
" | " | علامة اقتباس | U+0022 |
' | ' | الفاصلة العليا | U+0027 |
يجب تعريف جميع مراجع كيانات الأحرف الأخرى قبل استخدامها. على سبيل المثال، سيؤدي استخدام é(الذي يُعطي الحرف اللاتيني الصغير é، وهو الحرف E الصغير اللاتيني مع علامة التشكيل الحادة، U+00E9 في يونيكود) في مستند XML إلى ظهور خطأ ما لم يكن الكيان مُعرَّفًا مسبقًا. يتطلب XML أيضًا أن xتكون المراجع الرقمية السداسية عشرية بأحرف صغيرة: على سبيل المثال، ਛبدلاً من ਛ. يدعم XHTML ، وهو تطبيق XML، مجموعة كيانات HTML، بالإضافة إلى كيانات XML المُعرَّفة مسبقًا.
انظر أيضاً
- استنشاق ترميز الأحرف – تستخدمه العديد من المتصفحات عندما لا تتوفر بيانات تعريف ترميز الأحرف
- يونيكود و HTML
- رمز اللغة
- قائمة بمراجع كيانات الأحرف في XML و HTML
مراجع
- 1 2 3 "تحديد ترميز الأحرف للمستند" . HTML 5.3 . اتحاد شبكة الويب العالمية . 28 يناير 2021. تم الاطلاع عليه في 6 يناير 2026 .
- 1 2 3 4 5 "تحديد ترميز الأحرف للمستند" . معيار HTML . WHATWG . 17 ديسمبر 2025. تم الاطلاع عليه في 6 يناير 2026 .
- ↑ فيلدينغ، ر.؛ ريشكه، ج. (يونيو 2014). "نوع المحتوى" . في: فيلدينغ، ر.؛ ريشكه، ج. (محرران). بروتوكول نقل النص التشعبي (HTTP/1.1): الدلالات والمحتوى . IETF . doi : 10.17487/RFC7231 . S2CID 14399078. تاريخ الاسترجاع: 30 يوليو 2014 .
- ↑ "وحدة أباتشي mod_charset_lite" .
- ↑ براي، ت .؛ باولي، ج.؛ سبيربيرغ-ماكوين، س .؛ مالر، إ.؛ يرجو، ف. (26 نوفمبر 2008)، "برولوج وإعلان نوع المستند" ، XML ، W3C ، تم استرجاعه في 8 مارس 2010
- ↑ "HTML5 prescan a byte stream to determine its encoding" .
- ↑ "دراسة استقصائية حول استخدام ترميزات الأحرف مصنفة حسب الترتيب" . W3Techs . يناير 2026. تم الاطلاع عليه في 3 يناير 2026 .
- ↑ "8.2.2.3. ترميز الأحرف" . معيار HTML 5.1 . اتحاد شبكة الويب العالمية (W3C).
- ↑ "8.2.2.3. ترميز الأحرف" . معيار HTML 5. اتحاد شبكة الويب العالمية (W3C).
- 1 2 3 "12.2.3.3 ترميزات الأحرف" . معيار HTML الحي . WHATWG.
- 1 2 3 4 5 6 فان كيسترن، آن . "٤.٢: الأسماء والألقاب" . معيار الترميز . WATWG .
- 1 2 فان كيسترن، آن . "10.2.2.gb18030 التشفير" . معيار الترميز . WATWG .
- 1 2 فان كيسترن، آن . "5. الفهارس (§ فهرس gb18030)" . معيار الترميز . WATWG .
- ↑ فان كيستيرين، آن . "وحدة فك الترميز 10.2.1.gb18030" . معيار الترميز . WATWG .
- 1 2 3 مؤسسة موزيلا . "الاختلافات الملحوظة عن تسمية IANA" . Crate encoding_rs.docs.rs .
- ↑ فان كيستيرين، آن . "5. الفهارس (§ مؤشر مؤشر Big5)" . معيار الترميز . WATWG .
- ↑ فان كيستيرين، آن . "5. الفهارس (§ Index jis0208)" . معيار الترميز . WATWG .
- ↑ فان كيستيرين، آن . "5. الفهارس (§ مؤشر ISO-2022-JP كاتاكانا)" . معيار الترميز . WATWG .
- 1 2 فان كيسترن، آن . "12.2.1.وحدة فك ترميز ISO-2022-JP" . معيار الترميز . WATWG .
- ↑ فان كيستيرين، آن . "12.2.2. برنامج التشفير ISO-2022-JP" . معيار الترميز . WATWG .
- ↑ فان كيستيرين، آن . "5. الفهارس (§ فهرس EUC-KR)" . معيار الترميز . WATWG .
- 1 2 فان كيسترن، آن . "4.3 ترميزات الإخراج" . معيار الترميز . WATWG .
- ↑ فان كيستيرين، آن . "14.4.UTF-16LE" . معيار الترميز . WATWG .
- ↑ فان كيستيرين، آن . "6. خطافات للمعايير (§ فك التشفير)" . معيار الترميز . WATWG .
- ↑ فان كيستيرين، آن . "14.5.x-محدد من قبل المستخدم" . معيار الترميز . WATWG .
- ↑ فان كيستيرين، آن . "9. الترميزات القديمة أحادية البايت (§ ملاحظة)" . معيار الترميز . WATWG .
- 1 2 فان كيسترن، آن . "تصور مؤشر KOI8-U" . معيار الترميز . WATWG .
- ↑ "الخطأ رقم 17053: دعم تعيين KOI8-RU لـ KOI8-U" . W3C Bugzilla . 19 أغسطس 2015.
- ↑ فان كيستيرين، آن . "10.1.GBK" . معيار الترميز . WATWG .
- ↑ فان كيستيرين، آن . "5. الفهارس (§ الفهرس jis0212)" . معيار الترميز . WATWG .
- ↑ فان كيستيرين، آن . "14.1: الاستبدال" . معيار الترميز . WATWG .
- ↑ فان كيستيرين، آن . "2: الخلفية الأمنية" . معيار الترميز . WATWG .
- ↑ فان كيستيرين، آن . "4.2: الأسماء والمسميات (§ الإبدال)" . معيار الترميز . WATWG .
- ↑ براي، ت .؛ باولي، ج.؛ سبيربيرغ-ماكوين، س .؛ مالر، إ.؛ ييرجيو، ف. (26 نوفمبر 2008). "مراجع الأحرف والكيانات" . XML . W3C . تم الاسترجاع في 8 مارس 2010 .
روابط خارجية
- مراجع كيانات الأحرف في HTML4
- الدليل الشامل لترميز الأحرف على الويب ( مؤرشف بتاريخ 29 يوليو 2009 في أرشيف الإنترنت)
- فصل "ترميز كيانات HTML" من دليل أمان المتصفح - مزيد من المعلومات حول المتصفحات الحالية وكيفية تعاملها مع الكيانات
- مقالة ويكي مشروع أمان تطبيقات الويب المفتوحة حول البرمجة النصية عبر المواقع (XSS)
- HTML
- معايير اتحاد شبكة الويب العالمية
