رفع مشکل تبدیل حروف فارسی به علامت سوال (؟)

امروز متوجه شدم مدتی ست که بعضی از متن های فارسی وبلاگ به شکل علامت سوال (؟؟؟…) نشان داده می شوند. این متن ها آنهایی نبودند که از دیتابیس خوانده می شدند، بلکه آنهایی بودند که مستقیما در فایل های php نوشته شده بودند. نمایش آنها تا چند روز پیش درست بود و نمیدانم چه اتفاقی افتاد که این خرابی پیش آمد، اما بهرحال به دنبال راه حل گشتم. در اینترنت هرچه جستجو کردم (چه فارسی و چه انگلیسی) همه راه حل ها برای تصحیح encoding جدول های درون دیتابیس و یا connection مربوطه بود. هیچکدام از تصحیح فرمت encoding فایل ها چیزی نگفته بود. خودم با نرم افزار Notepad++ راهی را امتحان کردم و مشکل حل شد. از آنجاییکه ممکن است این مشکل برای هر فارسی زبان دیگری نیز پیش بیاید و راه حلی در اینترنت به سادگی پیدا نکند تصمیم گرفتم آنرا اینجا منتشر کنم.

ابتدا اگر نرم افزار Notepad++ را ندارید، این نرم افزار رایگان را از اینجا دانلود کنید. انصافا نرم افزار ساده و سبک و بسیار بدردبخوری ست! فرقی نمی کند که به چه زبانی برنامه نویسی کنید، احتمالا این نرم افزار به دردتان می خورد.

سپس آن فایل هایی را که کاراکترهای فارسی درونشان به صورت علامت سوال نمایش داده می شوند را با این نرم افزار باز کنید، از منوی بالا وارد Encoding شوید و Encoding in UTF-8 without BOM را انتخاب کنید. فایل را Save کنید و دوباره باز کنید (اگر با سرور کار می کنید آنرا بر فایل روی سرور overwrite کنید). همانطور که می بینید به همین سادگی مشکل برطرف شد!

نکته فنی: نرم افزار Notepad ویندوز هم در پنجره Save As قابلیت انتخاب کدگذاری UTF-8 را دارد، اما حتما از BOM استفاده می کند. در این حالت یک کاراکتر اضافی مزاحم در ابتدای فایل وجود خواهد داشت که هم ممکن است صفحات HTML را بهم بزند و هم ممکن است باعث شود در صفحات PHP هنگام کار با Cookie یا Session با خطای "Headers already sent" مواجه شوید، چرا که این کاراکتر اضافی قبل از هرچیز برای Client ارسال شده است.

اردلان نقشینه

من اردلان یک توسعه دهنده وب و مدیر تکنولوژی هستم که از ۸ سالگی وارد عرصه طراحی و توسعه وب شدم و تابحال بیش از یکصد وب سایت و نرم افزار تحت وب برای خودم یا برای مشتریانی از جمله شرکت های Fortune 500 ساختم. در سال ۱۳۹۲ بعد از دریافت مدرک کارشناسیم از دانشگاه صنعتی شریف تهران به شهر کلگری کانادا مهاجرت کردم. این روزها در کنار برنامه نویسی و مدیریت روی مهارت های اقتصادی و کارآفرینیم هم کار می کنم.

نوشته های مرتبط

۶۰ نظر

  1. bahaba گفت:

    سلام اردلان عزیز
    مشکل ح به راحتی که شما نوشتی حل نشد حالا چکار کنم؟

  2. میثم گفت:

    دست شما درد نکنه

  3. ببخشید من بلد نیستم اگه میشه شما این کارو برام انجام بدین در صورت موفقت اعلام کنین تا یوز و پس سایت را بهتون ایمیل کنم خواهشا با ایمیل جواب بدین ممنون می شم این کارو برام انجام بدین

  4. کلا همچی ؟؟؟؟ میشه مطلب عنوان سایت موضوع و… شما نگاه کنید

  5. محمد گفت:

    ممنون
    حیلی بهم کمک کردید

  6. علی گفت:

    سلام بسیار متشکر از راهنمایی که کردید من همین کار رو انجام دادم و مشکل مشابه من هم حل شد

  7. احسان گفت:

    آقا گل گفتی.مشکل ما هم حل شد.دمت گرم.مشکلم این بود که wamp server ، انکودینگ صفحه رو نمیتونه رو utf-8 تنطیم کنه.

  8. میلاد گفت:

    عاشقت شدم خیلی خوب شد ایول

  9. علی گفت:

    عالی بود قبلا درست کرده بودم اما الان هر چی ور رفتم جواب نمیداد تا فارسی سرچ گردم مطلب شما رو خوندم دمت هات!

  10. رضا ام گفت:

    سلام
    مرسی داداش
    ببخشید ی پیجی هست ک همش علامت سواله
    با اون برنامه هم کار کردم ولی درس نشد
    چیکارکنم؟!!
    آدرس پیج رو ارسال کنم؟!؟

  11. حسن آهنگری گفت:

    با سلام و احترام
    قبل از تغییر کدپیج میل سرور به یونی کد ۸ ، دو تا ایمیل از میل سرورم برای پاسخ دادن به دوستی که طرح پیشنهادی وب سایتم را ارائه داده بود فرستادم که متاسفانه در هنگام رویت تمام آن با علامت سئوال ؟ نشان داده میشوند .
    متنش برام از این جهت اهمیت داره که یادم نیست دقیقا چی نوشتم و با کپی متن ایمیل در نوت پد و باز کردن آن در نرم افزار معرفی شده از سوی شما و روش ارائه شده هم نتوانستم علامت سئوال را تبدیل به کارکترهای فارسی کنم ، راهی هست برای تبدیل یا خیر.

    • علامت سوال رو اگر کپی کنید و جای دیگه پیست کنید همون علامت سوال فقط منتقل میشه، نه کاراکتری که به علامت سوال تبدیل شده بود. فکر می کنم باید encoding میل سرورتون رو برگردونید.

  12. الل گفت:

    لینک حذف شد

    ببینید موقعی که در کامنت میخوام لینک ارسال کنم اگر بخشی از اون فارسی باشه به شکل بالا در میاد، من این مشکلو چه جوری باید حل کنم ، ببخشید همینجا چندبار تست کردم

    • این هیچ ایرادی نداره. بعضی کاراکتر ها در آدرس های اینترنتی قابل پذیرش نیستن و تبدیل میشن به یک سری کد دیگه.
      اگر مرورگرتون کاراکتر های فارسی در نوار آدرس نشون میده بخاطر اینه که کدهارو واستون ترجمه می کنه و ترجمه شده رو نشون شما میده، اما آدرسی که استفاده می کنه همون کد ها هست، نه کاراکتر های فارسی.

  13. بهشاد گفت:

    با سلام
    دوستانی که محتوای فارسی در سایتشون به شکل علامت سوال دیده میشه و متن فارسی در دیتابیس درست ذخیره نمیشه باید COLLATE دیتابیس رو به utf8 تتغییر بدهند.
    چون این مشکل خیلی از دوستان است من براتون فایل نصب آماده کردم که با اجرای آن در سایتتون تمام ساختارهای ستونها و جداول دیتابیس به utf8 تبدیل میشه.
    فایل زیپ رو از آدرس زیر دانلود کنید. داخل آن فقط یک فایل php قرار داده شده کد مربوطه در زیر آمده که آن را با ادیتور مناسب مثل note++ یا notepad باز کنید و در ۳ سطر اول طبق نامشون، نام دیتابیس نام کاربری و رمز کاربری را وارد کنید و ذخیره کنید. بعد فایل php رو در صفحه اصلی سایتتون آپلود کنید و از نوار آدرس آنرا اجرا کنید. مانند yoursite.com/change-collation.php

    نکته: با اجرای این کد تمام متن و محتوای فارسی که قبل از اینکار به شکل علامت سوال نشون داده میشه از دست میره و باید از اول فارسی ساز یا هرنوع ترجمه سایتتون رو ایمپورت کنید.


    <?php

    $database_name= 'phpfox377';
    $database_username= 'root';
    $database_password= 'root';

    $db = mysql_connect('localhost',$database_username,$database_password);
    if(!$db) echo "Cannot connect to the database - incorrect details";
    mysql_select_db($database_name);
    $result=mysql_query('show tables');
    while($tables = mysql_fetch_array($result)) {
    foreach ($tables as $key => $value) {
    mysql_query("ALTER TABLE $value CONVERT TO CHARACTER SET utf8_general_ci");
    }
    }
    mysql_query("ALTER DATABASE $database_name DEFAULT CHARACTER SET utf8 COLLATE utf8_persian_ci");
    echo "The collation of your database has been successfully changed!";
    ?>

    در لوکال کمی طول میکشه ولی در سرور چون سرعت بالاتره سریعتره.
    بعد از اینکه دیتابیس به درستی اصلاح شد پیغام زیر نشون داده میشه :
    The collation of your database has been successfully changed!
    تبریک : با انجام کارهای گفته شده در بالا ، از این پس محتوای فارسی بدرستی در دیتابیس شما ذخیره و نمایش داده میشود.

    موفق باشید.

  14. بهشاد گفت:

    مطمئن نبودم بشه اینجا کد php رو درست نمایش داد.
    ممنون

  15. احمد گفت:

    بابت راهنمای واضحتون سپاس گذارم. مشکلی که من رو عصبی کرده بود حل شد.

  16. حمید گفت:

    سلام
    بابا دمت گرم خیلی باحال بود
    ایول داری
    به امید دیدار

  17. قربانی گفت:

    سلام
    لطفا بگویید آیا می شود علامت سوال شدن عکس ها را دوباره به حال اول برگرداند؟اگر بله چگونه؟
    خیلی حیاتیه ممنون میشم به ایمیلم پلسخ بدهید.
    متشکرم

  18. محمدی گفت:

    سلام
    مطلب بسیار اموزده و کار آمد است دست دوستان درد نکند پیروز تر از قبل باشید فردا مال شماست

  19. قربانی گفت:

    سلام
    از راهنمایی شما متشکرم
    لطفا به سوال من پاسخ دهید.
    چرا تصاویر داخل وبلاگ من تبدیل به کادر خالی شده در صورتی که این تصاویر را از پیکو فایل آپلود کردم.

  20. هانیه گفت:

    برنامه‌ هلو من همش با علامت سوال داره میاد با این راه که گفتید حل میشه؟

  21. 455 گفت:

    ممنونم.شما انسان خوبی هستید که در فکر حل مشکلات هستییید.ممنونم.زنده باشید

  22. اکبری گفت:

    واقعا ممنون

  23. عسل گفت:

    من نمیدونم چجوری درستش کنم… لطفا اگه میشه کمکم کنید

  24. با سپاس
    لطفتان عالی

  25. علی گفت:

    سلام اگه همین مشکل در مورد یه نرم افزار باشه مشکل از کجاست…

  26. بنده خدا گفت:

    داداش خیلی ممنون دستت درد نکنه دیگه ناامید شده بودم خیلی ممنون درست شد خیلی وبسایتت قشنگه امیدوارم موفق و پیروز باشی خدانگهدار

  27. داود گفت:

    سلام من اینکارو انجام دادم درست نشد…مگه باید فرمت فایل رو از *.txt تغییر بدیم؟

  28. داود گفت:

    اقا میشه من فایل رو براتون بفستم خودتو برام درستش کنید؟
    بفرستم؟؟

  29. وحید گفت:

    مرسی اردلان

  30. MeysaM گفت:

    ممنونم به دردم خورد ……تشکر……..

  31. های شارژ گفت:

    باید UTF-8 باشه دیگه توی تنظیمات و یا اینکه بصورت کد این رو به مرورگر بفهمونی

  32. سلام
    من سایتی دارم که با استفاده از crawler اطلاعات رو از سایت ها استخراج , در دیتا بیس ذخیره و در سایت پردازش میکنه
    اما بدبختانه , این کاراکتر � به شدت عذابم میده , بعضی جاها نوشته میشه
    لطفا کمکم کنید

  33. حامد گفت:

    خیلی ازتون ممنون .خیلی در گیرش بودم. فقط حرف (ی) هنوز علامت ؟ نمایش داده میشه .می تونید راهنمایی کنید

  34. رکسانا گفت:

    سلام من همین مشکل را در بازکردن متون فارسی ذخیره شده در نوت پد ویندوز بشکل ANSI در محیط آندروید دارم لطفا کمک کنید من مترجم نرم افزار هستم و کلیه متون ترجمه شده من در محیط ویندوز بشکل ANSI ذخیره شده تا قابل خواندن برای ویندوزهای غیر فارسی نیز باشد متاسفانه کامپیوترم از بین رفته و قادر به خرید نیستم هیچ اپلیکیشن در آندروید قادر به نمایش صحیح متون ترجمه شده فارسی من نیست لطفا راهنمایی کنید

    سپاس

  35. amir گفت:

    مشکل من اینه که حروف فارسی در فایل های text ویندوزم به صورت ؟ در میاند.
    درضمن ویندوزم هم ۱۰ pro است.از نظر درایور ها هم همه نصب شدند به همراه برنامه های مورد نیاز.لطفا درصورت امکان مشکلم را حل کنید.با تشکر از سایت خوبتان

  36. سلام خیلی ممنونم از سایت خوبتون من مشکل برطرف شد سپاس از شما

  37. سلام
    راه ساده تری وجود نداره؟ اخه به مشتری که نمیشه گفت هرچی فایل داری با این روش اپلود کن

  38. مهرداد گفت:

    سلام…
    من دنبال این مشکل خیلی گشتم…اینجا هم از همون اول پیدا کردم…حتی روش دیتا بیس رو رفتم حل نشد…مشکل منم همین نوشته های درون صفحات بود…نوشته فارسی رو میگرفتم و به روش خودتون تبدیل میکردم اما باز نمی شد…اما اخرین بار اون نوشته فارسی رو حذف کردم اول انکدینگ رو تغیر دادم و بعد فارسی نوشتم…و مشکل حل شد….سپاسگذارم از تجریبیاتی ک اختیار ما تازه کارا میزارید….
    شاید دوستانی ک به این روش حل نشد هم اشتباه اول من باشه ک همون متن رو انکدش رو تغییر میدادم…پاک کنید اول انکد رو تغیر بدین بعد فارسی رو بنویسید…

  39. لیلا گفت:

    مرسی واقعا مطلبتون به دردم خورد خدا خیرتون بده ایشالا

  40. MOHAMMAD گفت:

    سلام خسته نباشید من در ویندوز ۸٫۱ زمان تایپ فارسی در فتوشاپ متن به صورت ؟؟؟؟؟ علامت سوال تایپ میشه. میشه راهنمایی کنید مشکل چیه؟؟؟

  41. اقا امین(amin18) گفت:

    سلام اصلا توی ویندوز ۱۰ شصت و چهار بایتی این قسمتو نداره که گفتید:
    از منوی بالا وارد Encoding شوید

  42. سمیرا گفت:

    ممنونم . کمکتون عالی بود. همیشه موفق باشید.

  43. احمد مبارکی گفت:

    ممنونم اردلان جان به خاطر پست خوبت

  44. محسن گفت:

    سلام ممنون به راحتی درست شد

  45. سارا گفت:

    ممنونم جواب داد.

  46. مهرسا گفت:

    عالی بود اردلان جان. ممنون

  47. امیری گفت:

    با عرض سلام و خسته نباشید.
    فاسل اکسلی دارم که با فرمت csv ذخیره شده و وقتی فایل رو باز می کنم با علامت سوال های زیادی مواجه میشم . نه با save as گرفتن و نه با نرم افزار نام برده حل میشود . لطفا در صورت امکان راهنمایی بفرمایید