حل مشكلة الترميز 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'");
mysql_query("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 ولا تجرب أن تختار غيره فالنتيجة غير مضمونة.

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

تقبلو تحيتي

روابط مفيدة:

وسوم: , ,

التعليقات 46 على “حل مشكلة الترميز 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. ابو مريم علق:

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

  23. رامى علق:

    جزاك الله خيرا, هذا حل فعلا مشكلة الترميز معى

  24. Randa علق:

    أخي عمر .. والله أنا عندي مشكلة بالترميز من سبعين سنة (لوول)

    عندي موقع بطاقات والسكربت مدفوع .. بعد ترقية السكريبت صارت مشكلة بالترميز ..ملف اللغة العربية يعمل تمام ..لكن لما بدي أكتب اسم الأقسام مثلا بالعربية تطلع الحروف الغريبة العجيبة

    صارلي شهرين مع مبرمج السكربت هو يحاول ويقول اعملي كزا وكزا و مافي فايدة

    حتى أصحاب السيرفر كمان بذلوا الجهد على الفاضي

    المنتدى مافيه أى مشكل ماعدا سكربت بطاقات التهنئة

    و آخر شي قال لي المبرمجالجداول يجب أن تكون بترميز UTF-8 ومن النوع utf8_unicode_ci ولا تجرب أن تختار غيره فالنتيجة غير مضمونة.

    ومسكتهم جدول جدول وغيرت وكمان نفس النتيجة

    ياريت أخي لاقي الحل عندك .. الموقع حذفت منه البطاقات تقريبا 900 بطاقة و أعدت تعريب اللغة

    وكلو على الفاضي

    ياريت لاقي الحل عندك وبكون ممنونتك

    أنا كنت عم بعمل بحث على الياهو لحل المشكلة ودلتني محركات البحث لموقعك

    خير إن شاء الله

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

    @Randa:
    لازم أشوف السكربت كله!،
    لكن هلا أنا شوي ما خذ إستراحة هالأيام أحاول أتصل لاحقاً بالإيميل.

  26. Randa علق:

    ألف شكر إلك أخي عمر ويعطيك ألف ألف عافية يارب

  27. Mohamed A.El-Kady علق:

    انا عملت زي مقلت فوق بالضبط و فعلا بقيت اعرف اسجل بالعربي في جدول المايسكويل باستخدام phpMyAdmin
    بس لسه عندي مشكلة ان صفحات البي اتش بي لما بديها بيانات انجليزي بلاقيها اتسجلت اما لما بديها بيانات عربي بلاقي خانة جديدة اضافت في الجدول برده بس فاضية (مش ؟؟؟؟ زي قبل لما استخدم utf-8)

    شكرا

  28. mmjksa علق:

    اخي العزيز
    اريد احول موقعي من vb الى phpbb ونزلت البيانات من موقعي الى سيرفر محلي (خادم الجمل)، ولكن واجهة مشكلة التعريب تخرج علامات استفهام؟؟؟؟

    فما الحل بارك الله فيك ونفع بعلمك

  29. عمرو علق:

    اخي الغالي عمر الدليمي سلمت الانامل اخي الحبيب لما طرحته من درس في غاية الاهمية ,,

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

  30. هند قنديل علق:

    السلام عليكم
    انا اخترعت حاجة و نفعت فى اظهار العربى تمام
    بس مش عارفة ايه مدى صحتها
    عملت بدل set names ‘utf8′
    set names ‘windows-1256
    و نفعت

    كدة صح؟؟؟’

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

    @عمرو:

    لكن اخي الكريم اني كاعد اعرب سكربت وعربتها كلة لكن الترميز عندي مدا تنحل مشكلة دورة

    إختلاف الترميز بين ملفات السكربت نفسها أو بينها وترميز قواعد البيانات يسبب مشكلة.

    @هند قنديل:

    set names ‘windows-1256
    و نفعت
    كدة صح؟؟؟’

    ما دامت نافعه فإنها صحيحة :) ، فلأن ترميز الملفات هو أصلا windows-1256 يجب إختيار هذا الترميز!

  32. أحمد علق:

    السلام عليكم
    أظن أن هناك خطأ في مثال الـ PHP الأول ,
    فالذي أعرفه أن دالة الـ mysql_query لا تسمح بـ “query stacking” , أي لا تسمح بتنفيذ أكثر من استعلام واحد في المرة, حتى ولو فصلت بين الاسعلامات بفاصلة منقوطة ( ; ) ,
    و في هذه الحالة لن يتم تنفيذ أي من الاستعلامات نهائيا.
    و أظن أن ذلك هو سبب أنها لا تعمل بطرقة صحيحة و ذلك الذي اضطرك إلى أن تقول في المثال التالي له:
    أحيانا هذا الكود لا يحل المشكلة فنجرب الكود التالي بدلاً منه:
    set names ‘utf8′;

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

    @أحمد:
    تم التصحيح، شكراً لك.

  34. عارف الدوسري علق:

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

    عدم تحويل الصفحات إلى UTF-8 سيخلق مشكلة توافق بين الترميزين المختلفين بالنسبة للمحتويات القديمة المعتمدة على ترميز ويندوز.

    لمزيد من الإيضاح الرجاء قراءة هذا الموضوع : http://manshurat.com/article/197-1.html
    ستجد فيه معلومات تساعدك على تحويل قواعد البيانات خصوصا إذا إستخدمت طريقة الأخ عمر و هي الطريقة الصحيحة للتعامل مع هذة المشكلة.

    شكرا لك أخي عمر الدليمي على هذة التدوينة الرائعة. من الناحية الفنية أعتقد بأنها أفضل ما قرأته في هذا المجال.

    تقبل تحياتي،
    عارف

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

    @عارف الدوسري:
    شكراً لك، على الإضافة الرائعة.

  36. امال علق:

    قبل كل شيء اشكركم على المعلومات الهامة التي تفيدونا بها و و في هذال انا لي مشكل هو انني استعملت الترميز utf8 ونجحت القاعدة البانات كتب العربي و لكن عندما في صفحت الوات يخرج لي اشكال دائرية بدلا من اللغة العربية لا ادرى ماهةو المشكل
    شكرا على الجواب مسبقا
    و السلام عليكم

  37. asma علق:

    انا عندى مشكلة انا نسيت الرقم السرى للجهاز و الاسم ايضا

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

    @asma:
    هل تستخدمين نظام لينوكس؟
    أنصحك بالذهاب إلى: مجتمع لينوكس العربي.

  39. ياسر علق:

    أولا يا صديقي أشكرك على التدوينة الرائعة

    ثانياً للأسف بعد أن جربت كل ما ورد في تدوينتك وبعد أن أضفت كود الphp الذي أشرت إليه أصبحت أدخل بيانات جديدة إلى قاعدة البيانات عن طريق أحد صفحاتي، وعند البحث عن تلك البيانات داخل phpmyadmin أجدها عبارة عن خانات فارغة (بعد أن كانت تضاف على هيئة رموز غير مفهومة) ولا أدري ما السبب في ذلك يا أخي رغم إنني قد نفذت التعليمات بمنتهى الدقة :(
    في انتظارك أخي وشكرا مرة أخرى

  40. عمر الرفاعي علق:

    والله انا يأئست من إيجاد حل لهذه المشكلة لكن الحمدلله الفضلل لله ولك اني حليت هذه المشكلة

    بارك الله فيك وجزاك ألف خير

  41. حلم عابر علق:

    مشكور اخي علي المعلومة وعندي استفسار

    هل لو قمت بتحويل ترميز لاي سكربت وليكن منتدي

    اقوم باعادة تحميل جميع ملفات الاسكربت بالترميز utf ؟

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

    @حلم عابر:
    أجل، هذا ضروري جداً!
    من ناحية الترميز الفعلي للملفات وكذلك من ناحية كتابة إسم الترميز في ملفات الـHTML كي يتعرف عليه المتصفح تلقائياً.
    وأنصحك بإسنتخدام Notepad++ لعمل هذه الأمور إن كنت تستخدم وندوز، إما إن كنت من مستخدمي لينوكس فبرنامج Geany رائع للتحويل بين الترميزات.

  43. عبد الله علق:

    كيف يمكن حل مشكلة اللغة العربية في المواقع ، بحيث استعملت جميع الاكواد المدكورة من طرف الاخوة ـ انا اريد حل نهائي لكي يتصفع الزوار موقعي دون عمل affichage _ codage_ unicode UTF_8
    شكرا

  44. عبد الله علق:

    تم

  45. بلال علق:

    السلام عليكم
    مشكور الاخ الدليمي
    عملت جميع الخطوات ولكن بعض الصفحات فقط نجحت , والغريب في بعض الصفحات ينجح نصفها.
    حقول phpmyadmin خلت من ??????????????????? لكن هناك رموز اخرى غير مفهومة

  46. النحاس قبل لا يقرأ موضوعك علق:

    الله يعطيك العافي
    جربتها وحلت لي المشكلة والله يعطيك العافية
    موضوع أكثر من رائع
    أسأل الله أن يكتب أجرك

أضف تعليقاً

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