Skip to main content

Byte Order Mark - BOM

تعريف :

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




وطبعا إذا لم يكن يحوي تيار البيانات أي من هذه القيم فإن هذا الملف لا يُصنف على أنه من مجموعة الملفات المرمزة بواسطة 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

Popular posts from this blog

ظروفنا ماتستحي وايامنا ماهيب ريف ,,

القصيدة لـ محمد بن الذيب ..... ويقول فيها ظروفنا ماتستحي وايامنا ماهيب ريف = والأرض من كثر القحط ماعاد شفت اعلافها وحقي على البيت القوي ماهو على البيت الضعيف = وإلى بغيت أدمدم الجمه على غرافها خليت شمس العشق مركونه على حد الرصيف = الخطه المحبوكه تحقق جميع اهدافها يا اهل الثنائيات مضمون الثنائه سخيف= أنا لحالي أحكم الدفه مع مجدافها والمعرفي (شرطي) وخاواني ورقيته (عريف) = لكن تجهله العلوم ارباعها وانصافها يبغى يسوي مع جنابي بهرجه وانا مخيف = وهو الى شاف الدروب المستحيله خافها والمختلف مجلة الجمهور والشعر النظيف = ماهي غريبة لالقيتو صورتي في غلافها بس الغريبة يوم مريت الحساء ياهل القطيف = تذكرت عيني مدامعها على مشرافها واليوم مابه عذر يوم ارقاك يالضلع المنيف = الا اني اتعب ارجولي من كثر وقافها واكثر مشاريه الشجر عليك يافصل الخريف = هتكت ستر غصونها واسرفت في كلافها انا جويع وجوعي مواصل ماهو قطعة رغيف = وعيني من الفرقا حداها الهم عن محرافها والعفو عند المقدره صوره من الحب العفيف = هذا كلام اللي قطار العمر كله طافها اخذت فـ أبها شهر كامل يسمونه مصيف = والشمس تحجبها السحابه والرعود خلافها وعي...

رابـــــح صقـــر == انا كـــــــــــــذا

أنا كذا من خلقني الهي أن جيت ببكي كذبتني المناديل *** الصبح أبصرخ وأمسي أجرح شفاهي أبعد علي البوح من نجمه سهيل نصفي يموت وباقي النصف لاهي راسي تجاذبها يدين المهابيل *** أكبرت فيك الحزم ناهي وراهي وأصغرت فيك الركض لمصافح الليل حبيبتي ما دونك ألا النواهي تكبيره الإحرام قيد الرجاجيل *** كلن على طبعه يفسر أشباهي ما غيرك الي لمسني نزعه النيل لقيت بك كذبن على الصدق زاهي ولقيت بك صدقن كما ريحه الهيل *** أنا أحبك من خلقني الهي ما تصدقي لو صدقتني المناديل

احبك ولا ظني ضلوعي تحمل . - محمد عبده

احبك .. احبك احبك ولا ظني ضلوعي تحمل .. أحبك عسى ربي يقوي ضلوعي احبك .. احبك احبك واظن الصبر يا زين كمل .. أحبك ولا موني بحبك أربوعي حبيبي .. حبيبي حبيبي دخيلك في محبك تجمل .. حبيبي ترفق جف منبع دموعي عشيري .. عشيري عشيري عيوني بازرق الدمع همل .. عشيري دموعي بيدي طفن شموعي ظنيني .. ظنيني ظنيني هذا قلبي رجا فيك وأمل .. ظنيني كفاني في هواكم خضوعي مقام: بياتي