حل مشكلة الترميز لللغة العربية وغيرها وبخاصة عن التعامل مع الاجاكس
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
في هذه المقالة ساتطرق الى مشكلة الترميز في عرض الصفحات والتي يعاني منها الكثيرون وبخاصة
المبرمجين الذين يتعاملون مع عدة مستعراض كانترنت اكسبلور وفايرفوكس وقروم وابرا ونتسكيب
من خلال تجربتي مع انرنت اكسبلور وخلال استعمال خاصية ال get في الاجكس
لاتوجد مشكلة على الاطلاق فهو يقوم باسارل البيانات بحسب ترميز الصفحة المحدد وبخاصة عند تعيين علامة الهيدر
النقطة الاساسية charset=windows-1256"
ولقد قام الكثيير بالتحويل الى الترميز العالمي
utf-8 لحل اغلب مشاكل الترميز وانا فكرت في ذلك طبعا الفرق بين الترميزين هو حجم الذاكرة الذي يستهلكه كل منهما
ومن خلال الابحاث التي حاولت جاهد تم ايجاد المشاكل التالية
عند استخدام نوع الارسال في ajax تقوم المستعرضات بارسال البيانات على شكل ترميز اخر منها utf-8
وهيا المستعرضات الحديثة ومنها الترميز
windows-1256 ومنها iso 8859-1 وهذه العقبة مشكلة كبيرة مع العملم انا قمنا بتحديد الهيدر في اول الصفحة وهو
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 وغيرها
ولمزيد من المعلومات والدوال يرجى زيارة الرابط التالي
السلام عليكم ورحمة الله
تم ايجاد علة في بعض المستعرضات بخصوص هذه المشكلة
فيجب التحقق في صفحة الارسال من نوع الترميز عبر الدالة
[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]
وبذلك يتم التشغيل بنجاح
اتمنى من الله ان تعم الفائدة على الجميع وشكرا لكم