• php
  • 18053
  • 16-12-2008
  • EbNCaNa
  • تعريف : Byte order mark هي مجموعة رموز في بداية الملف النصي ووظيفتها اعلام المستخدم بان هذا الملف تابع لمجموعة محارف يونيكود Unicode فاما ان يكون بترميز UTF-8 او UTF-16 او UTF-32 .
    هذه المجموعة من الرموز لا تكون ظاهرة بالملف واذا كنا نريد ان نعرف ترميز ملف معين فنستطيع ان تفتح الملف باي محرر HEX وننظر الى بداية ترتيب بيانات قيم HEX في المحرر والرسم التوضيحي التالي يبين ترميز الملف حسب مجموعة الرموز الاولى :

    i

    وطبعا إذا لم يكن يحوي تيار البيانات أي من هذه القيم فإن هذا الملف لا يُصنف على أنه من مجموعة الملفات المرمزة بواسطة Unicode .
    العلاقة بين BOM و الترميز UTF-8 : هناك علاقة وطيدة بين الـ Byte order mark والترميز العالمي المشهور UTF-8 فعند استخدامنا لأي محرر تقريبا واردنا حفظ الملف بترميز UTF-8 فان المحرر تلقائيا باضافة هذه الرموز الى بداية الملف والهدف كما اسلفنا ان يتم اعطاء هوية لهذا الملف على انه من مجموعة محارف Unicode والا فانك عندما تفتح الملف من جديد بدون هذه الرموز فان المحرر لن يتعرف على الترميز المناسب لهذا الملف وبالتالي فانه سيعتبر ترميز الملف ANSI او الترميز التلقائي للملفات عند فتحها بواسطة هذا المحرر . أهمية حذف الـ BOM من الملفات التي بترميز UTF-8 : انه ومن المهم جدا للمبرمجين ان يقوموا بحذف هذه الرموز من بداية الملف والسبب ان بعض لغات البرمجة مثل لغة php لا تقبل من اي اشارة ان تتقدم على بعض دوالها المهمة مثل دالة الجلسات Session او الدالة Header والابقاء على رموز الـ BOM يعني تعطل الملف واعطاء خطأ برمجي لا يعرف المبرمج سببه في كثير من الاحيان لجهله برموز الـ Byte Order Mark فيأخذ بالبحث في المواقع والمنتديات عن سبب الخطأ ويحاول ان يعرض الكود الذي في داخل الملف على من هم اكثر خبرة منه علهم يعرفون السبب وفي الحقيقة ان الكود خالي من الشوائب والعيوب البرمجية تماما لكن سبب الخطأ البرمجي هو الرموز الاضافية في بداية الملف . يمكن أن يقول البعض أنه ما من حاجة لاستخدام الترميز UTF-8 في ملفاتنا لأننا نستخدم الترميز ANSI ولا توجد مشكلة، والجواب طبعاً أن هذا الترميز هو الترميز العالمي والأكثر شهرة والأكثر فاعلية لأنه يعمل مع جميع لغات العالم ويعمل في جميع أنظمة التشغيل ولأنه متوافق أيضا مع المعايير القياسية للمواقع W3 . مشاكل وعقبات عند استعمال الترميز UTF-8 وعلاقتها بالرموز الاضافية BOM وحلولها : 1- انا مبرمج اريد الانتقال من البرمجة بترميز ANSI الى الترميز UTF-8 ولكن المتصفح يظهر خطأ برمجي دائما مع العلم بان الكود سليم وخالي من الشوائب البرمجية . الجواب : من الواضح انك تستخدم دالة php طلائعية اي انها لا تقبل لاي رمز ان يسقبها في الملف والا تعطل عملها نهائيا وهنا فانك تستعمل الدالتين Session و Header … الحل ان تقوم بتحميل اي محرر يحتوي على خاصية تحرير رموز HEX مثل PSPad وتقوم بحذف القيم الاولى في الملف وهي EF BB EF او ان تقوم بتحميل محلل يحوي خاصية حفظ الملف بدون BOM اي انك عند حفظك للملف فانه سيجعلك تختار ترميز الملف وانت اكيد ستختار الترميز UTF-8 واسفل هذا الخيار هناك مربع اختيار بالنقر عليه سوف يتم حفظ الملف مع الرموز الاضافية BOM وعند سحب علامة الصح من داخله فان الملف سوف يحفظ بدون هذه الرموز وانا ارشح محرر EMeditor او البرنامج الرائع Dreamweaver لهذه المهمة … وبعدها قم بحفظ الملف وان شاء الله لن تعود هذه الأخطاء البرمجية للظهور مجددا . 2- بحمد الله تم التخلص من مشكلة الرموز الاضافية ببداية الملف BOM واشتغل الملف بنجاح لكني عندما اريد ان اعدل على الملف اقوم بفتحه بواسطة المفكرة Notepad لكن لا يظهر لي بان الملف بترميز UTF-8 وانما يظهر على انها صاحب الترميز ANSI او لا يظهر الترميز بالمرة ؟!! اعتقد باني سأعدل عن فكرة البرمجة بواسطة الترميز UTF-8 !! الجواب : أخي، كل شي بالصبر وحب المعرفة يأتيك على رجليه … برنامج المفكرة Notepad ومع الأسف فانه يعتبر كل ملف لا يحوي الرموز الاضافية BOM يعتبره بترميز ANSI !!! وليس المفكرة فقط وانما برنامج المفكرة ++ (Notepad ++ ) ايضا به نفس المشكلة طيب ما الحل ؟؟ من الافضل اخوي ان تقوم باستعمال محررات محترمة وصديقة للترميز UTF-8 لكي تتخطى هذه المشكلة وانا ارشح هنا برنامج Dreamweaver مرة اخرى لهذه المهمة لان الامور لا تلتبس عليه عند فتح ملف UTF-8 بواسطته وحتى لو كان الملف بدون BOM فأنه سوف يعتبره ملف يونيكود UTF-8 وارشح ايضا برنامج EMeditor لهذه المهمة ايضا . المراجع :
    http://blogs.msdn.com/michkap/archive/2005/01/20/357028.aspx
    http://en.wikipedia.org/wiki/Byte_Order_Mark
    http://unicode.org/faq/utf_bom.html#BOM المقال لـ EbNCaNa
    عدد المقيّمين 1 وإجمالي التقييمات 5
    12345