نوشتن متن فارسی در پایگاه داده (راه حل برای مشکل نمایش علامت های سوال (؟)، در پایگاه داده و یا در سایت)
حتما تاکنون برایتان پیش آمده است که یک متن فارسی را در پایگاه داده ثبت کرده اید، اما بعدا که آن را فراخوانی می کنید، تنها علامت های سوال (؟) به جای متن فارسی، نمایش داده می شود (در برخی مواقع، حتی در phpMyAdmin نیز اینگونه است). برای رفع این مشکل، در ادامه نکاتی را آموزش خواهیم داد.
قبل از هرچیز، هنگام ساخت پایگاه داده، باید مشخصه collation را برای ((پایگاه داده))، ((جدول های پایگاه داده)) و ((ستون هایی از هر جدول که شامل کاراکتر می باشند)) را به صورت utf8_general_ci تعریف کنیم. اگر قبلا آنها را ساخته ایم، کافی است که این موارد را برای آنها تغییر بدهیم و اگر اکنون می خواهیم آنها را بسازیم، در حین ساخت، گزینه هایی برای تعیین این موارد وجود دارد.
پس از تعیین collation ، به صورتی که گفتیم، متن فارسی در خود پایگاه داده (یعنی در phpMyAdmin) به طور صحیح نمایش داده می شود و دیگر خبری از علامت های سوال نیست، اما چنانچه از طریق کدهای PHP صفحات سایت خود به پایگاه داده متصل شوید و اطلاعات را دریافت کرده و در صفحه نمایش دهید، ممکن است متن فارسی، به صورت علامت های سوال نمایش داده شود. برای رفع این مشکل، کدهای لازم برای اتصال به پایگاه داده را به صورت زیر بنویسید :
دقت کنید که در کدهای بالا، باید username و password را مطابق اطلاعات خودتان وارد کنید (تغییر بدهید).
همچنین مراقب باشید که به جای عبارت mysql ، اشتباها عبارت mysqli را به کار نبرید. شیوه کدنویسی این دو، کمی تفاوت دارد و ممکن است با پیام خطا روبرو شوید.
علاوه بر موارد بالا که تذکر داده شد، باید در میان دو تگ head صفحه، کد زیر نوشته شود :
یعنی باید ساختار کلی صفحه ای که در آن می خواهیم از پایگاه داده، اطلاعات دریافت کنیم، به صورت زیر باشد :
سلام من این کد ها رو زدم ولی جوابی نگرفتم مقادیر رو که از دیتابیس میگیرم و تو لیست ویو نمایش میدم به صورت علامت سوال نمایش میده.
سلام.
با phpmyadmin ، جدول (table) موجود در پایگاه داده (database) را بررسی کنید و ببینید که متن ها به شکل صحیح در جدول ذخیره شده اند یا خیر، زیرا ممکن است مشکل در مرحله ذخیره متن ها در جدول باشد.
همچنین بررسی کنید که حتما مشخصه collation برای ((پایگاه داده))، ((جدول های پایگاه داده)) و ((ستون هایی از هر جدول که شامل کاراکتر می باشند)) به صورت utf8_general_ci تعیین شده باشد.
به مرور سعی کنید که کدهایتان را بر اساس کلاس mysqli در PHP بنویسید، زیرا کلاس mysgli از کلاس mysql در PHP ، امن تر است (کلاس mysql قدیمی شده است). در این زمینه، دسته کلید زیر را ببینید :
و برای اتصال، کلید زیر را بخوانید (در آن، کد مناسب برای نمایش صحیح متن های فارسی نیز ذکر شده) :
در هر صورت، کد PHP هر چه که باشد، باید حتما مشخصه collation را برای مواردی که ذکر شد، بررسی نمایید.
همچنین شما در مورد نمایش در ListView صحبت کردید، بنابراین متن ها را در اندروید نمایش می دهد. دقت کنید که هنگام دریافت متن از صفحات PHP توسط برنامه اندروید نیز باید مواردی برای دریافت متن فارسی رعایت شود. در این زمینه، به بخش برنامه نویسی اندروید سایت مراجعه نمایید.
در این حالت، مهمترین نکته این است که شما باید بررسی کنید که مشکل از کدامیک از موارد زیر است (مرحله به مرحله چک کنید) :
1- متنی که قبلا در پایگاه داده ذخیره شده
2- صفحه PHP که متن را نمایش می دهد
3- کدی در برنامه اندروید که برای دریافت متن فارسی از صفحه PHP به کار می رود
واقعا دمت گرم
صدتا سایت رو گشتم،فقط کدهای شما جواب داد.
آقا ممنون. دمت گرم. خلاصمون کردی از دست این مشکل.
بسیار از این مطلبتون سپازگزارم. یک روز تمام توی سایتها داشتم دنبال راه حل کامل می گشتم که بالاخره اینجا پیدا کردم.
سلام من دیتا بیس و جدول و ستون را utf8کردم و هر اطلاعات که ثبت می کنم درست به صورت فارسی ذخیره میشود و در همانmysql نمایش می دهد اما اطلاعات قبلی هنوز به صورت ؟؟؟؟ است چکار کنم قبلیها درست بشن
البطه من دستور زیر رو هم در mysql اجرا کردم اما همچنان به شکل ؟؟؟؟ هست لطفا راهنمایی کنید ممنون میشم جواب را به ایمیلم بفرستید
این دستوری بود که یادم رفت در پیام قبلی براتون بفرستم
UPDATE `ads` SET `name`=CONVERT(CAST(CONVERT(`name` USING latin1) AS BINARY) USING utf8)
آقا ممنون. دمت گرم. خلاصمون کردی از دست این مشکل.
قشنگ 2 روز وقتمو گرفته بود
خیلی خیلی ممنون بابت آموزشی که گذاشتید مشکل من کاملا حل شد