حل مشكلة الترميز UTF-8 واللغة العربية - قواعد بيانات MYSQL
عندما تبرمج موقعاً بيدك كاملاً ستواجه مشاكل عدة، من هذه المشاكل: عند إختيارك الترميز UTF-8 لقواعد البيانات والعمل على اللغة العربية. يظهر المحتوى العربي في الموقع على شكل علامات إستفهام!
حسناً لا يأس مع الحياة :P. تستطيع حل المشكلة بإضافة إستعلام MYSQL هذا كي ينفذ مباشرة بعد الإتصال بقواعد البيانات:
set character_set_server='utf8';
set names 'utf8';
أو مثال على إستخدامها في لغة PHP:
<?php mysql_connect($db_hostname, $db_username, $db_password); mysql_query("set character_set_server='utf8'; set names 'utf8';"); // The rest of you php code! ?>
ويفضل إستخدامه مباشرة بعد الإتصال بقاعدة البيانات.
أحيانا هذا الكود لا يحل المشكلة فنجرب الكود التالي بدلاً منه:
set names 'utf8';
أو بلغة php:
<?php mysql_connect($db_hostname, $db_username, $db_password); mysql_query("set names 'utf8';"); // The rest of you php code! ?>
كما أن هناك بعض الخطوات التي يجب أن تتبعها قبل أن تعتمد هذا الحل وهن:
- جميع ملفاتك الخاصة بالموقع سواء كانت PHP أو HTML يجب أن تحمل الترميز UTF-8. ولا تنسى أيضاً كتابة نوع الترميز في ترويسة ملفات HTML.
- قاعدة البيانات يجب أن تكون بترميز UTF-8 ومن النوع utf8_unicode_ci ولا تجرب أن تختار غيره فالنتيجة غير مضمونة.
إذا لم تحل المشكلة إخبرني
تقبلو تحيتي
20 سبتمبر 2008 في الساعة 11:35 م
السلام عليكم ورحمة الله وبركاته،
الأخ الكريم عمر، شكرا لك على هذه التدوينة، وبالفعل مشكلة ترميز اللغة العربية خصوصا في التعامل مع قواعد البيانات مشكلة مؤرقة، وبالنسبة للحل الذي طرحته مشكورا فلقد سبق لي قراءته ولكن لم أرتح له حقا، وذلك لأنني حينما أتأمل أحد السكربتات الكبيرة مثل برامج إدارة المحتوى فإني ألاحظ أنه يمكن استعمالها بألعديد من اللغات دون مشكلة، وحينما أتأمل الاستعلامات في الكود البرمجي لا ألاحظ أي شيء من هذه الإضافات التي وردت بالتدوينة، مما جعلني أجزم بوجود حل آخر وأعتقد أن السر حتما في الترميز.. للأسف انشغالات الحياة اليومية لا تدعني أتباع الأمر كما يجب، لذلك لم أجرب بعد طريقة ناجعة كما أريد..
شكرا لك على مشاركتك إيانا ما تعرف وجزاك الله عنا كل خير..
مني لك أرق تحية..
21 سبتمبر 2008 في الساعة 4:11 ص
همممم !
يا كثر ما حست في حل هذه المشكلة وكل مرة أجرب طريقة مختلفة ..
شكراً عمر ..
21 سبتمبر 2008 في الساعة 5:19 ص
تعقيب على [عبد الهادي]:
دقق النظر. إبحث عن الإستعلام في كل ملفات البرنامج أنا متأكد أنك ستجده!. فهو إستعلام mysql معروف والأمر طبيعي.
ربما لم أكن واضحاً!. فمن قال إنها للغة العربية فقط؟ إستخدم أي لغة أخرى! ولن تواجه مشكلة :). هذا الحل يوفر لك إستخدام UTF-8 بأي لغة كانت!
وكيف تريد؟
تعقيب على [سلوى]:
22 سبتمبر 2008 في الساعة 1:24 ص
مرحبا اخوي عمر …
أعتقد هذي المشكلة الي اعاني منها الامرين في موقعي ….
سبق ان طرحت مشكلتي في سوالف سوفت وقمت بالرد علي عن نفس المشكلة..
[تم حجب بقية التعليق لخصوصيته]
24 سبتمبر 2008 في الساعة 1:51 م
السلام عليكم ورحمة الله وبركاته..
أهلا بك أخي الكريم عمر من جديد..
لقد دققت النظر وعدت ^_^
أمزح معك ولكنني فعلا دققت النظر في ما طرحت وفيما كنت أجد، فما قصدته في ردي كان يتعلق بترميز اللغة العربية، بينما نحن هنا بصدد الترميز العالمي UTF-8 والذي يصلح لكل اللغات..
لعل البحث وإيجاد نفس الطريقة أظناني فجعلني أرى كل الطرق متشابهة، فاعذر قصر نظري أخي الحبيب..
شكرا لك مجددا على الطريقة التي أراني متأكدا من نجاعتها ولو من غير أن أجربها..
موفق ومني لك أرق تحية..
24 سبتمبر 2008 في الساعة 2:44 م
تعقيب على [عبد الهادي]:
مرحباً بك في أي وقت :)، ولا مشكلة أبداً
28 سبتمبر 2008 في الساعة 7:28 ص
اخي الكريم درس اكثر من رائع وكنت انتظرة من فترة ليست ببسيطة
عندما اعلمني احد اصدقائي ان ترميز utf-8 هو مفيد جدآ وخوصأ معا محركات البحث
ولاكن لم افهم درس كثيرآ
هل الاوامر التى كتبتها انت ازرعها في القاعدة ام اضعها ببداية كل ملف ؟؟؟ ربما يكون سؤالي غبيآ قليلآ ولاكن اسمحلي
29 سبتمبر 2008 في الساعة 7:00 م
تعقيب على [سلطان]:
سؤالك في محله ولكن!، نبهت على مكان الإستخدام عندما قلت لك:
“ويفضل إستخدامه مباشرة بعد الإتصال بقاعدة البيانات.”
إي في ملف PHP أو ASP أو أي كان!. بمجرد تفيذ أوامر الإتصال بقواعد البيانات. نفذ الأمر :).
الأمر ليس بمفيد أو غير مفيد إنما هو ضرورة قصوى، والتخلي عنه يسبب لك مشاكل كبيرة :). بإستخدامه تستطيع أن تضع في نفس الصفحة نصوص عربية وإنجليزية وصينية وأمازيغية!! هذا الأمر لم يكن متاحاً من قبل في أي ترميز آخر :). ومسألة تضخم الحجم هذه طبيعية فكل شيء حجمه أكبر الآن! بدأ من أقراص الخزن والفلاش ميموري والسي دي روم ^^.
29 سبتمبر 2008 في الساعة 10:40 م
أخي الكريم هل ممكن ان تشرح لي الطريقة وبالتفصيل
اتمنى ذلك
معا خالص شكري واحترامي لك
30 سبتمبر 2008 في الساعة 2:10 م
تعقيب على [سلطان]:
تم تعديل الشرح مع بعض التوضيح، أرجوا أن يكون كافياً!. وإن لم يكن فأقترح عليك أن تراجع بعض الدروس في أساسيات PHP والإتصال مع قواعد البيانات فسيفيدك ذلك كثيراً :).
6 أكتوبر 2008 في الساعة 12:14 م
سؤال صغير
اذا عندي قاعدة بيانات ترميزها latin1_swedish_ci
و ادرت تحويلاها غلى utf-8_general_ci
هل استطيع مع الحفاظ على البيانات الموجودة بداخلها
و عرضها بشكل سليم
6 أكتوبر 2008 في الساعة 3:30 م
تعقيب على [bassam]:
الإجابة أرسلت على الإيميل،
7 أكتوبر 2008 في الساعة 8:33 ص
شكرا جزيلا
فعلا حليت المشكلة عندي. كنت استطيع مشاهدة الكتابة العربية في الموقع و في موقع التحكم و لكن لم اكن استطيع في php admin
الان بعد اضافة الكود
mysql_query(”set names ‘utf8
يمكن الان مشاهدة البيانات بالعربية في كل مكان مع امكانية تعديلها من اي مكان
شكرا مجددا و بالتوفيق للجميع
29 نوفمبر 2008 في الساعة 6:13 م
السلام عليكم و رحمة الله
اخي عمر
انا زرعت الامر
و لكن هي هي نفس المشكلة
للحين ارى علامات الاستفهام بمكان الحروف العربية
يا ترى كيف حلها
مع العلم ان الترميز زي ماقلت
؟
و على فكره انا عملت اوبغريد من نسخة 368 إلى 373
مع العلم عملت على جميع النسخ و لكن بدون جدوى
تحياتي
29 نوفمبر 2008 في الساعة 8:12 م
تعقيب على [عايد الأحمد]:
المقصود هنا ليس سكرتبات المنتديات فقط! بل هي كل برامج الأنترنت.
ويجب أن تنبته أن الخطوة هذه ليست هي الوحيدة!
فكما قلت لك:
واحدة من هذه الشروط غير متوفرة لديك وأتوقع هو ترميز قاعدة البيانات!. إن كنت لا تعرف كيف تحول ترميزها في موقعك فلا تجرب بنفسك إستعن بشخص ذو خبرة.
أو على الأقل جربها على كومبيوترك الشخصي.
29 نوفمبر 2008 في الساعة 8:26 م
عمر تقدر تضيفني آخي على المسنجر و راح اشرح لك مشكلتي بالتفصيل
لأن و الله متوقف المنتدى على هذه المشكلة
—.——@—
5 ديسمبر 2008 في الساعة 11:51 م
السلام عليكم ورحمة الله وبركاته اخي عمر انا عندي نفس المشكله بس مش منتديات المشكله اني بستخدم asp-mysql والمصيبه اني جربت كل الحلول المطروحه ومن غير اي فائدة دايما بتظهر علامات استفهام سواء عند الاضافه او بالطبع العرض مع ان العربي بيظهر ممتاز علي صفحات الويب باستخدام الutf8 ومش عارف ايه الحل اخشي انه يكون بسبب المستضيف
http://www.brinkster.com
لو عند حضرتك او اي حد من الاخوة اي معلومات تستطيع مساعدتي في حلها اكون عاجز عن الشكر
جزاكم الله كل خير
7 ديسمبر 2008 في الساعة 9:09 ص
تعقيب على [أبو مريم]:
أخي الكريم موقعك متوقف عن العمل.
وأنا أتوقع أنا مشكلتك ليست كبيرة. سأساعدك بها في حال فتحت موقعك.
11 ديسمبر 2008 في الساعة 10:24 ص
اخي الغالي ا.عمر جزاك الله كل خير ويارب فعلا تطلع مشكله صغيرة مش كبيرة
الرجاء ضيف ميلي الخاص
20 ديسمبر 2008 في الساعة 1:19 ص
السلام عليكم أخي عمر.
1- أين أضع الأكواد التي ذكرتها في مدونتك؟ هل في ملف sql لقاعدة بيانات المنتدى؟ مع العلم أنها مضغوطة بالونرار؟
2- كيف أغير ترميز قاعدة البيانات؟ فأنا حاولت بكل الطرق أن أحول علامات الاستفهام التي تظهر مكان الداتا في المنتدى ولم أفلح. فقد جربت رفع قاعدة البيانات المحفوظة عندي بواسطة الـ(phpmyadmin) بترميز utf8 أو latin1 و غيرهما ولم تنحل المشكلة.
أرجو المساعدة السريعة فالمنتدى متوقف!
23 ديسمبر 2008 في الساعة 11:16 ص
شكرا لك
تمت التجربة بنجاح
29 ديسمبر 2008 في الساعة 4:59 ص
اخي الكريم عمر لقد ارسلت لك مشكلتي علي الميل اتمني ان تكون وصلت لك