Murls Murls
 
   حل مشكلة الترميز لللغة العربية وغيرها وبخاصة عن التعامل مع الاجاكس

بسم الله الرحمن الرحيم


السلام عليكم ورحمة الله وبركاته
في هذه المقالة ساتطرق الى مشكلة الترميز في عرض الصفحات والتي يعاني منها الكثيرون وبخاصة
المبرمجين الذين يتعاملون مع عدة مستعراض كانترنت اكسبلور وفايرفوكس وقروم وابرا ونتسكيب
من خلال تجربتي مع انرنت اكسبلور وخلال استعمال خاصية ال get في الاجكس
لاتوجد مشكلة على الاطلاق فهو يقوم باسارل البيانات بحسب ترميز الصفحة المحدد وبخاصة عند تعيين علامة الهيدر

 <meta content="text/html; charset=windows-1256" http-equiv="Content-Type" />




النقطة الاساسية charset=windows-1256"
ولقد قام الكثيير بالتحويل الى الترميز العالمي
utf-8 لحل اغلب مشاكل الترميز وانا فكرت في ذلك طبعا الفرق بين الترميزين هو حجم الذاكرة الذي يستهلكه كل منهما
ومن خلال الابحاث التي حاولت جاهد تم ايجاد المشاكل التالية
عند استخدام نوع الارسال في ajax تقوم المستعرضات بارسال البيانات على شكل ترميز اخر منها utf-8
وهيا المستعرضات الحديثة ومنها الترميز
windows-1256 ومنها iso 8859-1 وهذه العقبة مشكلة كبيرة مع العملم انا قمنا بتحديد الهيدر في اول الصفحة وهو

 @header ('Content-Type:text/html;charset=windows-1256');



مع ذلك لم يفلح
فبدات في بعض التجارب الا ان وجدت الذي ابحث عنها وهيا تغيير الاعدادات الاقلمية عبر الكود البرمجي في بي اتش بي
وهيا مجموعة الدوال

 iconv


الاكواد التي سنقوم باستخدامها

 iconv_set_encoding("internal_encoding""windows-1256");

iconv_set_encoding("output_encoding""windows-1256");

iconv_set_encoding("input_encoding""windows-1256");



iconv_set_encoding وهيا تقوم بتحديد نوع الترميز
لو نلاحظ انه يحتاج الى بارمترين الاول هو نوع التحكم بالترميز
internal_encoding == الترميز الداخلي
output_encoding==الترميز الذي سينتج من عمليات الخرج
input_encoding == الترميز الذي ينتج عن عمليات الدخل
ثم البارمتر الثاني هو نوع الترميز المراد التعامل معه وجعله الترميز الاساسي
ويكون هذا الكود في صفحة ادخال المعلومات اي في صفحة الفورم السبب من ذلك
ان الاجراءات التي هيا سبب المشكلة صفحة ادخال واخراج البيانات منها وهي صفحة الفورم
وبذلك تضمن ان عملية ارسال البيانات بترميز window-1256 صحيحة 100% بأذ ن الله
ولن تحتاج الى اصناف تحويل الترميز وغيرها مما يساعد في عملية تقليل الكود
طبعا يمكنك معرفة نوع الترميز عبر الدالة

 iconv_get_encoding


مثال

 var_dump(iconv_get_encoding('all'));



 Array

(

    [
input_encoding] => ISO-8859-1

    
[output_encoding] => ISO-8859-1

    
[internal_encoding] => UTF-8

)




طبعا استخدمنا البارمتر all للدالة على اننا نريد جميع الخرج ويمكنك التحكم بحسب البارمتر الذي تريد اضافته اي output_encoding وغيرها
ولمزيد من المعلومات والدوال يرجى زيارة الرابط التالي


http://www.php.net/manual/en/function.ob-iconv-handler.php

والله ولي التوفيق


حرر في تاريخ 2009/16/11 الساعة 09:54:30
السلام عليكم ورحمة الله
تم ايجاد علة في بعض المستعرضات بخصوص هذه المشكلة
فيجب التحقق في صفحة الارسال من نوع الترميز عبر الدالة
[PHP](iconv_get_encoding('input_encoding')[/PHP]

وبذلك تحصل على الترميز المحدد
فنقوم بوضع شرط على الترميز اذا لم يكن ترميز windows-1256
نقوم بعملية تحويل الترميز الى ترميزنا المحدد عبر
[PHP]iconv('utf-8','windows-1256',$_POST['title']);[/PHP]
مثال على ذلك
[PHP]if (iconv_get_encoding('input_encoding')!=='windows-1256') {
$_POST['title']=iconv('utf-8','windows-1256',$_POST['title']);
$_POST['subject']=iconv('utf-8','windows-1256',$_POST['subject']);
}[/PHP]

وبذلك يتم التشغيل بنجاح
اتمنى من الله ان تعم الفائدة على الجميع وشكرا لكم
عبد الكافي الحسن في 2009/11/18 الساعة 12:11:53 مساء