حل مشكلة الترميز 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!
?>

كما أن هناك بعض الخطوات التي يجب أن تتبعها قبل أن تعتمد هذا الحل وهن:

  1. جميع ملفاتك الخاصة بالموقع سواء كانت PHP أو HTML يجب أن تحمل الترميز UTF-8. ولا تنسى أيضاً كتابة نوع الترميز في ترويسة ملفات HTML.
  2. قاعدة البيانات يجب أن تكون بترميز UTF-8 ومن النوع utf8_unicode_ci ولا تجرب أن تختار غيره فالنتيجة غير مضمونة.

إذا لم تحل المشكلة إخبرني :)

تقبلو تحيتي

روابط مفيدة:

وسوم: , ,

التعليقات 22 على “حل مشكلة الترميز UTF-8 واللغة العربية - قواعد بيانات MYSQL”

  1. عبد الهادي علق:

    السلام عليكم ورحمة الله وبركاته،
    الأخ الكريم عمر، شكرا لك على هذه التدوينة، وبالفعل مشكلة ترميز اللغة العربية خصوصا في التعامل مع قواعد البيانات مشكلة مؤرقة، وبالنسبة للحل الذي طرحته مشكورا فلقد سبق لي قراءته ولكن لم أرتح له حقا، وذلك لأنني حينما أتأمل أحد السكربتات الكبيرة مثل برامج إدارة المحتوى فإني ألاحظ أنه يمكن استعمالها بألعديد من اللغات دون مشكلة، وحينما أتأمل الاستعلامات في الكود البرمجي لا ألاحظ أي شيء من هذه الإضافات التي وردت بالتدوينة، مما جعلني أجزم بوجود حل آخر وأعتقد أن السر حتما في الترميز.. للأسف انشغالات الحياة اليومية لا تدعني أتباع الأمر كما يجب، لذلك لم أجرب بعد طريقة ناجعة كما أريد..
    شكرا لك على مشاركتك إيانا ما تعرف وجزاك الله عنا كل خير..
    مني لك أرق تحية..

  2. سلوى علق:

    همممم !
    يا كثر ما حست في حل هذه المشكلة وكل مرة أجرب طريقة مختلفة ..
    شكراً عمر ..

  3. عمر الدليمي علق:

    تعقيب على [عبد الهادي]:

    وحينما أتأمل الاستعلامات في الكود البرمجي لا ألاحظ أي شيء من هذه الإضافات التي

    دقق النظر. إبحث عن الإستعلام في كل ملفات البرنامج أنا متأكد أنك ستجده!. فهو إستعلام mysql معروف والأمر طبيعي.

    حينما أتأمل أحد السكربتات الكبيرة مثل برامج إدارة المحتوى فإني ألاحظ أنه يمكن استعمالها بألعديد من اللغات دون مشكلة،

    ربما لم أكن واضحاً!. فمن قال إنها للغة العربية فقط؟ إستخدم أي لغة أخرى! ولن تواجه مشكلة :). هذا الحل يوفر لك إستخدام UTF-8 بأي لغة كانت!

    ذلك لم أجرب بعد طريقة ناجعة كما أريد..

    وكيف تريد؟ ;)

    تعقيب على [سلوى]:

    يا كثر ما حست في حل هذه المشكلة وكل مرة أجرب طريقة مختلفة ..

    :)

  4. Abdullah علق:

    مرحبا اخوي عمر …
    أعتقد هذي المشكلة الي اعاني منها الامرين في موقعي ….
    سبق ان طرحت مشكلتي في سوالف سوفت وقمت بالرد علي عن نفس المشكلة..
    [تم حجب بقية التعليق لخصوصيته]

  5. عبد الهادي علق:

    السلام عليكم ورحمة الله وبركاته..
    أهلا بك أخي الكريم عمر من جديد..
    لقد دققت النظر وعدت ^_^
    أمزح معك ولكنني فعلا دققت النظر في ما طرحت وفيما كنت أجد، فما قصدته في ردي كان يتعلق بترميز اللغة العربية، بينما نحن هنا بصدد الترميز العالمي UTF-8 والذي يصلح لكل اللغات..
    لعل البحث وإيجاد نفس الطريقة أظناني فجعلني أرى كل الطرق متشابهة، فاعذر قصر نظري أخي الحبيب..
    شكرا لك مجددا على الطريقة التي أراني متأكدا من نجاعتها ولو من غير أن أجربها..
    موفق ومني لك أرق تحية..

  6. عمر الدليمي علق:

    تعقيب على [عبد الهادي]:

    لعل البحث وإيجاد نفس الطريقة أظناني فجعلني أرى كل الطرق متشابهة، فاعذر قصر نظري أخي الحبيب..

    مرحباً بك في أي وقت :)، ولا مشكلة أبداً :)

  7. سلطان علق:

    اخي الكريم درس اكثر من رائع وكنت انتظرة من فترة ليست ببسيطة
    عندما اعلمني احد اصدقائي ان ترميز utf-8 هو مفيد جدآ وخوصأ معا محركات البحث
    ولاكن لم افهم درس كثيرآ
    هل الاوامر التى كتبتها انت ازرعها في القاعدة ام اضعها ببداية كل ملف ؟؟؟ ربما يكون سؤالي غبيآ قليلآ ولاكن اسمحلي

  8. عمر الدليمي علق:

    تعقيب على [سلطان]:

    ربما يكون سؤالي غبيآ قليلآ ولكن اسمحلي

    سؤالك في محله ولكن!، نبهت على مكان الإستخدام عندما قلت لك:
    ويفضل إستخدامه مباشرة بعد الإتصال بقاعدة البيانات.
    إي في ملف PHP أو ASP أو أي كان!. بمجرد تفيذ أوامر الإتصال بقواعد البيانات. نفذ الأمر :).

    عندما اعلمني احد اصدقائي ان ترميز utf-8 هو مفيد جدآ

    الأمر ليس بمفيد أو غير مفيد إنما هو ضرورة قصوى، والتخلي عنه يسبب لك مشاكل كبيرة :). بإستخدامه تستطيع أن تضع في نفس الصفحة نصوص عربية وإنجليزية وصينية وأمازيغية!! هذا الأمر لم يكن متاحاً من قبل في أي ترميز آخر :). ومسألة تضخم الحجم هذه طبيعية فكل شيء حجمه أكبر الآن! بدأ من أقراص الخزن والفلاش ميموري والسي دي روم ^^.

  9. سلطان علق:

    أخي الكريم هل ممكن ان تشرح لي الطريقة وبالتفصيل
    اتمنى ذلك
    معا خالص شكري واحترامي لك

  10. عمر الدليمي علق:

    تعقيب على [سلطان]:

    أخي الكريم هل ممكن ان تشرح لي الطريقة وبالتفصيل

    تم تعديل الشرح مع بعض التوضيح، أرجوا أن يكون كافياً!. وإن لم يكن فأقترح عليك أن تراجع بعض الدروس في أساسيات PHP والإتصال مع قواعد البيانات فسيفيدك ذلك كثيراً :).

  11. bassem علق:

    سؤال صغير
    اذا عندي قاعدة بيانات ترميزها latin1_swedish_ci
    و ادرت تحويلاها غلى utf-8_general_ci
    هل استطيع مع الحفاظ على البيانات الموجودة بداخلها
    و عرضها بشكل سليم

  12. عمر الدليمي علق:

    تعقيب على [bassam]:
    الإجابة أرسلت على الإيميل،

  13. ابو عبدالله علق:

    شكرا جزيلا

    فعلا حليت المشكلة عندي. كنت استطيع مشاهدة الكتابة العربية في الموقع و في موقع التحكم و لكن لم اكن استطيع في php admin

    الان بعد اضافة الكود
    mysql_query(”set names ‘utf8

    يمكن الان مشاهدة البيانات بالعربية في كل مكان مع امكانية تعديلها من اي مكان

    شكرا مجددا و بالتوفيق للجميع

  14. عايد الاحمد علق:

    السلام عليكم و رحمة الله

    اخي عمر

    انا زرعت الامر

    و لكن هي هي نفس المشكلة

    للحين ارى علامات الاستفهام بمكان الحروف العربية

    يا ترى كيف حلها

    مع العلم ان الترميز زي ماقلت

    ؟

    و على فكره انا عملت اوبغريد من نسخة 368 إلى 373

    مع العلم عملت على جميع النسخ و لكن بدون جدوى

    تحياتي

  15. عمر الدليمي علق:

    تعقيب على [عايد الأحمد]:
    المقصود هنا ليس سكرتبات المنتديات فقط! بل هي كل برامج الأنترنت.
    ويجب أن تنبته أن الخطوة هذه ليست هي الوحيدة!
    فكما قلت لك:

    1. جميع ملفاتك الخاصة بالموقع سواء كانت PHP أو HTML يجب أن تحمل الترميز UTF-8. ولا تنسى أيضاً كتابة نوع الترميز في ترويسة ملفات HTML.
    2. قاعدة البيانات يجب أن تكون بترميز UTF-8 ومن النوع utf8_unicode_ci ولا تجرب أن تختار غيره فالنتيجة غير مضمونة.

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

  16. عايد الاحمد علق:

    عمر تقدر تضيفني آخي على المسنجر و راح اشرح لك مشكلتي بالتفصيل

    لأن و الله متوقف المنتدى على هذه المشكلة

    —.——@—

  17. ابو مريم علق:

    السلام عليكم ورحمة الله وبركاته اخي عمر انا عندي نفس المشكله بس مش منتديات المشكله اني بستخدم asp-mysql والمصيبه اني جربت كل الحلول المطروحه ومن غير اي فائدة دايما بتظهر علامات استفهام سواء عند الاضافه او بالطبع العرض مع ان العربي بيظهر ممتاز علي صفحات الويب باستخدام الutf8 ومش عارف ايه الحل اخشي انه يكون بسبب المستضيف

    http://www.brinkster.com

    لو عند حضرتك او اي حد من الاخوة اي معلومات تستطيع مساعدتي في حلها اكون عاجز عن الشكر

    جزاكم الله كل خير

  18. عمر الدليمي علق:

    تعقيب على [أبو مريم]:
    أخي الكريم موقعك متوقف عن العمل.
    وأنا أتوقع أنا مشكلتك ليست كبيرة. سأساعدك بها في حال فتحت موقعك.

  19. ابو مريم علق:

    اخي الغالي ا.عمر جزاك الله كل خير ويارب فعلا تطلع مشكله صغيرة مش كبيرة

    الرجاء ضيف ميلي الخاص

  20. محب السنة علق:

    السلام عليكم أخي عمر.
    1- أين أضع الأكواد التي ذكرتها في مدونتك؟ هل في ملف sql لقاعدة بيانات المنتدى؟ مع العلم أنها مضغوطة بالونرار؟
    2- كيف أغير ترميز قاعدة البيانات؟ فأنا حاولت بكل الطرق أن أحول علامات الاستفهام التي تظهر مكان الداتا في المنتدى ولم أفلح. فقد جربت رفع قاعدة البيانات المحفوظة عندي بواسطة الـ(phpmyadmin) بترميز utf8 أو latin1 و غيرهما ولم تنحل المشكلة.
    أرجو المساعدة السريعة فالمنتدى متوقف!

  21. محمود علق:

    شكرا لك

    تمت التجربة بنجاح

  22. ابو مريم علق:

    اخي الكريم عمر لقد ارسلت لك مشكلتي علي الميل اتمني ان تكون وصلت لك

أضف تعليقاً

لتعرف كيفية وضع الإبتسامات داخل التعليق إضغط هنا