حل مشکل نمایش حروف فارسی در PHP و MySQL (راهنمای کامل)
حتما برای شما هم پیش آمده است که هنگام کار با کاراکترها و حروف فارسی در PHP به مشکلاتی بر خوردهاید. برای مثال کاراکترها برای شما به شکل حروفی ناخوانا و یا علامت های سوال بوجود آمده اند. این مشکل در ۲ حالت مختلف بوجود می آید. حالت اول زمانی که شما میخواهید اطلاعات را وارد دیتابیس (Database) یا پایگاه داده کنید و حالت دوم زمانی که میخاهید اطلاعات را از پایگاه داده بخوانید. در این فایل و مقالهی آموزشی دربارهی روش حل مشکل نمایش حروف فارسی در PHP صحبت میکنیم و برای این مشکل، ۴ راه حل مختلف ارائه میدهیم.
مشکل حروف فارسی در PHP
اگر میخواهید ۴ روش مختلف برای حل مشکل حروف فارسی در PHP را یاد بگیرید تا کاراکترهای فارسی را به درستی نمایش دهید، فیلم زیر را مشاهده کنید:
آیا گناه کردیم که زبانمان فارسی است؟
یکی از مسائلی که ما فارسی زبانها با آن همیشه درگیر هستیم، مشکل زبانمان یعنی زبان فارسی است. در بسیاری از جاها ما با زبان فارسی مشکل داریم. بسیاری از نرم افزارها زبان فارسی را ساپورت نمیکنند و خیلی جاها به مشکل میخوریم.البته که این مشکل مخصوص زبان فارسی نیست، و خیلی از رسم الخطهای غیر انگلیسی هم درگیر این مشکل هستند.
همین مشکل در هنگام کار با کدهای PHP و دیتابیس MySQL نیز وجود دارد. اما برای هر مشکلی، میتوان حداقل یک راه حل پیدا کرد. در این مقاله ۴ راه حل مختلف را یاد میگیریم که چطور میتوانیم در PHP و MySQL کاراکترهای فارسی را نمایش دهیم و مشکل حروف فارسی در PHP را بطور کلی حل کنیم.
نکته: ممکن است یکی از این روش ها برای شما کاربردی باشد و مشکلتان را حل کند. اما استفاده از این ۴ روش بصورت هم زمان در تمام پروژه های شما پیشنهاد میشود. مخصوصا روش ۱ و ۲.
راه حل های مختلف حل مشکل حروف فارسی در PHP
همانطور که گفتیم، معمولا در ۲ حالت ما با کاراکترهای فارسی به مشکل برمیخوریم:
- هنگامی که میخواهیم اطلاعات را از دیتابیس بخوانیم.
- هنگامی که میخواهیم اطلاعات را وارد دیتابیس کنیم.
برای حل مشکل حروف فارسی در PHP راههای مختلفی است. که در ادامه، ۴ روش مرسوم برای حل مشکل کاراکترهای فارسی در PHP را بررسی میکنیم.
روش اول: یک Query ساده بزنید
روش اول و سادهترین روش این است که یک کوئری (Query) ساده به دیتابیس بزنید. دقیقا مثل همانطور که وقتی میخواهید یک کوئری SELECT را اجرا کنید.
برای مثال کد زیر را نگاه کنید:
$db = mysqli_query('localhost', 'root', '', 'ecommerce'); mysqli_query($db, "SET NAMES utf8");
در کد بالا، در خط اول به پایگاه داده ای به نام ecommerce وصل شدیم و در خط دوم، یک Query ساده به آن زدیم که حاوی محتوای SET NAMES utf8 میباشد. این یک خط کد ساده، یکی از روشهای حل مشکل حروف فارسی در PHP است. اگر میخواهید دربارهی utf8 بیشتر بدانید صفحهی مربوط به utf8 در ویکی پدیا میتواند خیلی مفید باشد.
روش دوم: استفاده از تگ meta
راه حل دوم برای حل مشکل کاراکترها و حروف فارسی در PHP، استفاده از یک خط کد ساده در تگ head کد html شماست. کد زیر را نگاه کنید:
در خط ۴ از این کد، از یک تگ سادهی meta استفاده کردهایم که بتوانیم به مرورگر (Browser) بفهمانیم که قصد استفاده از کاراکتر و حرف فارسی را در فایل خود داریم. این نیز یکی دیگر از روش های حل مشکل حروف فارسی در PHP است که میتوانید از آن استفاده کنید.
روش سوم: تعریف Collation هنگام ساخت پایگاه داده (Database)
در روش سوم حل مشکل حروف فارسی در PHP ، شما هنگام ساخت یک دیتابیس جدید در phpmyadmin، باید نوع کاراکترهایی که میخواهید در دیتابیس خود استفاده کنید را مشخص کنید. همانطور که در عکس زیر میبینید، برای اینکار کافی است که هنگام ساخت یک دیتابیس جدید، تنظیمات مربوط به Collation آنرا روی utf8_general_ci قرار دهید:
روش چهارم: تغییر Collation دیتابیس های از قبل ساخته شده
روش سوم برای حل مشکل کاراکترهای فارسی در PHP و MySQL، یک تنظیم ساده در phpmyadmin است.
برای اینکار phpmyadmin را باز کنید، یک دیتابیس را انتخاب کنید و از منوی بالا روی Operations کلیک کنید. سپس در بخش Collation، گزینه utf8_general_ci را انتخاب کنید و نهایتا روی Go کلیک کنید. برای توضیحات بیشتر میتوانید آموزش ویدئویی ابتدای صفحه را مشاهده کنید.
اگر در استفاده از حروف فارسی در PHP مشکل دارید، حتما یکی از این ۴ روش مشکل شما را حل خواهد کرد. اما حتما به شما توصیه میکنیم که تمامی این روش ها در هرکدام از پروژههایتان که میخواهید از زبان و کاراکتر و حروف فارسی در آن استفاده کنید، به کار ببرید.
درباره مهدی خسروی
۸ سال پیش که یادگیری برنامه نویسی رو آغاز کردم، با یک مشکل بزرگ مواجه شدم: کمبود منابع آموزشی حرفهای و کاربردی به زبان فارسی. به همین دلیل، بعد از چندین سال فعالیت حرفهای در زمینهی برنامه نویسی، تصمیم گرفتم دانستهها و تجربیات خودم را با شما عزیزان به اشتراک بگذارم. پیشنهاد میکنم به آدرس yadify.com/gifts حتما سر بزنید :)
نوشته های بیشتر از مهدی خسرویمطالب زیر را حتما مطالعه کنید
32 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
دیدگاهتان را بنویسید لغو پاسخ
این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش میشوند.
مگه بهتر از مهدی خسروی هم داریم! 🙂
یکی از تاثیرگذار ترین آدم های زندگیم بودین و هستین
فیلم های اولیه زنبیل دات کام رو دارم من هنوز و برای خیلی ها ارسال کردم 😉
درضمن اینم بگم بعد از کلی گشت و گذار تو نت فقط اینجا تونستم مشکل علامت سوال رو رفع کنم
و اینکه تازه فهمیدم که اسمتون رو به یادیفای تغییر دادید 🙂
آرزوی موفقیت دارم براتون
سلام امیر عزیز
ممنونم از شما و خوشحالم که آموزش ها تا این حد واستون مفید بوده. نظرات شما برای من بسیار انرژی بخش هست
موفق تر باشید
سلام و عرض ادب،
آقا ما این ۴ روشا انجام دادیم ولی همچنان حروف نمایش داده شده نامفهومه(اطلاعات به صورت فارسی درج می شوند ولی در نمایش جور دیگه ی)
ممنون میشم راهنمایی کندی حدود یک ماهی میشه دارم تموم روشها را امتحان میکنم.
اینم آیدی تلگرامم ali_eh3ani
متشکر
سلام علی گرامی
با توجه به صحبتی که داشتیم، به این نتیجه رسیدیم که ممکن هست مشکل از سمت هاست شما باشد. چون در لوکال هاست کد شما بدون هیچ مشکلی اجرا میشود. لطفا با ارائه دهندهی هاستتون در تماس باشید.
سلام آقای خسروی من تمام کار هایی که شما گفتید رو کردم ولی بازم هم زمانی که میخوام از دیتا بیس متن های فارسی رو بخونم علامت سوال میده به نظرتون مشکل ازچیه؟
سلام محمد عزیز
خیلی بعید میدونم که این روش هارو استفاده کنید و باز هم با کاراکترهای فارسی مشکل داشته باشید.
حروف فارسی در دیتابیس خوب ذخیره شدن و فقط هنگام نمایش با مشکل مواجه هستید؟ یا کلا در دیتابیس هم به شکل علامت سوال هستند؟
آقا انصافا دم شما گرم
تو ۲۰ تا سایت فارسی و غیر فارسی سرچ کردم مشکلم حل نشد.
باهمون راه حل اول شما مشکلم حل شد.
تو ایران نمون تلف میشی
سلام پوریا گرامی
خوشحالم که این آموزش براتون مفید بوده و تونسته مشکلتون رو حل کنه
در خصوص ایران موندن/یا مهاجرت کردن من نظر متفاوتی با شما دارم. و به نظرم ایران بهترین جا برای رشد و پیشرفت هست. در این باره در آینده حتما در سایت صحبت خواهم کرد.
ممنونم از شما
درود بر شما بسیار مسلط و روان.
سوال اینکه (در دیتابیسی که از قبل ساخته شده) در قسمت General settings پی اچ پی مای ادمین هم نیاز هست که به utf8_general_ci تغییر داده بشه یا اینکه فقط از Operations باید انجام داد؟
سوال دوم اینکه utf8_general_ci انتخاب بشه بهتر هست یا utf8_persian_ci?
ممنونم از شما محمد عزیز
اگر هنگام ساخت دیتابیس utf8_general_ci رو انتخاب کنید، دیگر نیازی به انجام اینکار در General Settings نیست. اما اگر بعد از ساخت دیتابیس میخواهید اینکار رو انجام بدید، نیاز هست که از قسمت General Settings اقدام بفرمایید.
در خصوص تفاوت بین utf8_persian_ci و utf8_general_ci نکتهای که هست اینه که در utf8_persian_ci شما بعد از مرتب سازی بر اساس حروف الفا، حروف مخصوص فارسی (گ چ پ ژ) در جای خود قرار میگیرند، اما در utf8_general_ci این حروف در انتها و بعد از آخرین حرف یعنی حرف (ی) قرار خواهند گرفت
یک دنیا ممنون : )
فقط روش اول جواب داد خیلی ممنون
درودبرشرفت عالی بود
ممنون بابت توضیحات
اگر اجازه بدید چند تلفظ اشتباه رو بنویسم شاید برای دوستان جالب باشه.
char: چَر
varchar: وَرچَر
charset: چارست (گاهی اوقات کَرِکتِر سِت)
شاید فکر کنید char از واژه character گرفته شده ولی اینطور نیست. اگر علاقه مند باشید میتونید گوگل کنید.
باز هم ممنون از ویدئو مفیدتون
سلام احمد عزیز
از لطف شما ممنونم که دانش و تخصص خودتون رو با ما به اشتراک میزارید. حتما مفید هست برای همه. مرسی از شما 🙂
آقای خسرو شما بهترین هستین مایه سربلندی کشورمون هستین
من از ۸ سالگی برنامه نویسی دارم میکنم و الان۱۳ سالمه اگه کمک های شما استاد بزرگوار نبود من الان هیچی نمی شدم اینو با جدیت میگم شما بهترین هستین به امید پیشرفتتون
سلام نیما عزیز.
از محبت شما ممنونم و خوشحالم که آموزشها برای شما مفید بوده 🙂
خیلی ممنون!
روش دوم جواب داد!
توی جدول های پایگاه داده، هر ستونی که از نوع متن باشه یه Collation داره. کولیشن اون ستونی که قراره توش متن فارسی ذخیره بشه رو روی utf8_persian_ci تنظیم کنین. البته کلِ MySQL، هر پایگاه داده و هر جدول هم یه کولیشن جداگانه برا خودشون دارن که بهتره اونارم روی utf8_persian_ci بذارین.
ضمناً توی اسکریپت PHP باید بعد از اتصال به پایگاه داده و قبل از زدن کوئری، این دستور رو بنویسین:
$conn->set_charset(“utf8”);
(اینجا $conn اسم فرضی شِیئیه که از روی کلاس mysqli ساختم. بنابراین در حالت Procedural و PDO دستورش یه کم متفاوته که خودتون میتونین شکل درستشو پیدا کنین)
عالی بود متشکرم
سلام شما خیلی خوبین
من چهار روش و با هم انجام دادم کارم شد خیلی ممنون نمیدونم چطور تشکر کنم.
سلام حمید جان
خوشحالم که واستون مفید بوده 🙂
سلام
سپاس فراوان
خط اول جواب داد
تشکر
یعنی واقعن دمتون ی دنیا گرم!
روش های شما کار نکرد اما این روش کار کرد:
(“db->set_charset(“utf8
(یه $ هم اولش اضافه کنید)
مرسی امیرحسین جان برای به اشتراک گذاری این کد
دوستان اگه مشکلشون با کدهای بالا حل نشد میتونن از این کن استفاده کنن
خیلی ممنون به خاطر تمام زحمات و ساعاتی که صرف یادگیری کرده اید از چشم و فکر ذهن گرفته تا وقت و زمان و مشکلات وهزینه هایی که در این راه صرف کرده اید تا در امر آموزش آن را به کارببندید .
دبیر ریاضی شهرستان خرمشهر
سلام جناب پورابراهیمی
ممنونم از شما و محبتتون.
بابت شغل بینظیرتون هم بهتون تبریک میگم و براتون آرزوی سلامتی میکنم
عالی