Helen_Farhani
یک شنبه 02 اردیبهشت 1386, 03:44 صبح
با سلام به همه دوستان
بعد از چند روز جستجو در میان تاپیکهای انجمنهای مختلف ( مجید آنلاین - برنامه نویس - پرشین تولز ) بالاخره توانستم از میان پاسخها و جمع بندی مطالب، به تواناییهای زیر دست یابم.
هر چند که شاید این توانایی برای تعدادی از دوستان بسیار سهل و آسان باشد، اما این تاپیک را باز کردم که آن دسته از دوستانی که در این باره مشکل دارند بتوانند به خواسته خود برسند (مثل خودم ).
با انجام مراحل چند گانه ای که مطرح میکنم شما به گزینه های ذیل دست می یابید.
درج اطلاعات فارسی در دیتابیس
نمایش صحیح متون فارسی در صفحات سایت بصورت UTF-8 ( توسط کد برنامه نویس )
نمایش صحیح اطلاعات فارسی در phpMyAdmin
تهیه نسخه پشتیبان
بازیابی نسخه پشتیبانابتدا بایستی در phpMyAdmin یک دیتابیس تعریف کنید. ( کسانی که بر روی هاست میخواهند کار کنند باید از داخل Cpanel دیتابیس خود را تعریف نمایند).
http://img.majidonline.com/pic/82071/1.png
بعد از ساخته شدن دیتابیس باید نام Table را مشخص کنید و تعداد فیلدهایی که نیاز دارید را مشخص نمایید ( تصویر زیر ).
http://img.majidonline.com/pic/82074/2.png
باستی توجه داشته باشید که Collation تمام فیلدهایی که قرار هست در آینده مطالب فارسی در آن جای گیرد utf8_persian_ci باشد. همچنین Collation خود Table را هم utf8_persian_ci انتخاب نمایید. (در صورت نیاز می توانید Collation کل پایگاه داده را تغییر دهید - به شکل اول توجه نمایید) پس تا اینجا باید وضعیت Table شما به صورت تصویر زیر باشد.
http://img.majidonline.com/pic/82078/4.png
و همچنین وضعیت فیلدهایی که قرار هست متون فارسی را در خود جای دهند باید مانند تصویر زیر باشد.
http://img.majidonline.com/pic/82077/3.png
آن دسته از عزیزانی که میخواهد توسط فایل sql جداول و فیلدهای خود را بسازند ( استفاده از تب Import در phpMyAdmin ) توجه داشته باشند که باید فایل sql مربوط به دیتابیس خود را ویرایش نموده و فیلدهایی که قرار هست فارسی باشند را مانند زیر از:
http://img.majidonline.com/pic/82081/6.png
به این شکل تغییر بدهند.
http://img.majidonline.com/pic/82084/5.png
بسیار خوب، تا اینجا دیتابیس آماده شد. از این به بعد در مورد فایلهای PHP که کدهای ما در آن قرار دارد صحبت می کنیم.
اول از هر چیز باید توجه داشته باشید encoding صفحه ای که قرار هست اطلاعات را برای دیتابیس بفرستد حتما باید UTF-8 باشد. برای این منظور از کد زیر در tag هدر صفحات خود استفاده می کنیم.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
به عبارتی به این شکل:
http://img.majidonline.com/pic/82086/html.gif
و مرحله آخر مربوط می شود به فایل php شما که یونیکد باشد ( با مرحله قبل قاطی نکنید ) این مرحله با مرحله قبل تفاوت دارد. در مرحله قبل صحبت از encoding صفحه ارسال مطالب فارسی بود. اما در این مرحله در مورد ساختار خود فایل php صحبت می کنیم که به چه شکل پیش برویم که به مشکل بر نخوریم.
خب در اینجا باید اندکی توضیح اضافه بدهم.
وقتی شما یک فایل txt را در notepad ویندوز درست میکنید و مطلب فارسی در آن مینویسید، در هنگام ذخیره سازی باید از گزینه encoding موجود در پنجره save as برنامه notepad گزینه UTF-8 را انتخاب نمایید. ( تصویر زیر )
http://img.majidonline.com/pic/82087/notepad.gif
با انجام این عمل 3 کاراکتر در ابتدای فایل txt شما قرار خواهد گرفت که در برخی از editor ها قابل نمایش بوده و در برخی دیگر قابل نمایش نیست. به عنوان مثال من یک فایل txt که در آن کاراکترهای فارسی وجود دارد را در ادیتور Zend باز کردم. ( تصویر زیر )
http://img.majidonline.com/pic/82089/zend.gif
لازم به ذکر است که در مواقعی که شما از تابع Header در php استفاده میکنید بودن این چند کاراکتر اجرای اسکریپت php شما را متوقف میکند. به عنوان مثال من دستور زیر را در یک فایل که اون 3 کاراکتر در ابتدای آن قرار دارد را ذخیره کرده و اجرا میکنم ( مانند زیر )
header('Location: http://www.yahoo.com/');
با فراخوانی فایل مذکور و اجرای دستور بالا خطای زیر نمایش داده می شود.
Warning: Cannot modify header information - headers already sent by (output started at C:\script\test.php:1) in C:\script\test.php on line 2
اگر شما این 3 کاراکتر را با هر روشی حذف کنید، در فایل مذکور نمی توان فارسی تایپ کرد و نمایش داد . البته چرا، راهی وجود دارد، و آن استفاده از کدهای یونیکد بجای کاراکترهای فارسی میباشد. ( مانند زیر )
این فقط برای تست است
یا
&#1575;&#1610;&#1606; &#1601;&#1602;&#1591; &#1576;&#1585;&#1575;&#1610;
&#1578;&#1587;&#1578; &#1575;&#1587;&#1578;
که ملاحظه می فرمایید، این روش روش مطلوبی نیست.
من اینجا راهی را پیشنهاد میدهم که شما به راحتی یک فایل php داشته باشد که هم بتوانید در سورس برنامه خود فارسی را صحیح تایپ نمایید و هم اطلاعاتی که توسط این فایل php به داخل دیتابیس فرستاده میشود، بصورت صحیح ذخیره گردد. البته روشی را که در اینجا مطرح میکنم روش آنچنان اصولی و حرفه ای نیست ( خودم از این روش استفاده میکنم. البته فقط 1 بار این عمل را انجام داده ام که شرح خواهم داد )
شما بایستی وارد برنامه frontpage بشوید و قبل از هر کاری ابتدا کیبورد خود را در حالت فارسی قرار داده و متنی را تایپ نمایید ( بصورت فارسی ) در نتیجه کدهای HTML شما به این شکل تغییر میکند.
<html>
<head>
<meta http-equiv="Content-Language" content="fa">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1256">
<title>New Page 2</title>
</head>
<body>
<p>تست هست</p>
</body>
</html>
سپس به قسمت تنظیمات صفحه جاری رفته و تنظیمات را مانند شکل زیر ایجاد نمایید.
http://img.majidonline.com/pic/82093/frontpage.gif
کد شما بدینصورت تغییر خواهد کرد.
<html>
<head>
<meta http-equiv="Content-Language" content="fa">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>New Page 2</title>
</head>
<body>
<p>تست هست</p>
</body>
</html>
و در نهایت فایل مذکور را save نموده و پسوند فایل را از txt به php تغییر دهید ( نیازی نیست هر بار که میخواهید یک فایل جدید php ایجاد کنید این مراحل را پشت سر بگذارید. فقط و فقط یک فایل اینطوری درست کنید و برای ایجاد فایلهای بعدی فقط از این فایل یک کپی بگیرید.
من یک نمونه از این فایل را به این پست attach کرده ام.
حالا خیلی راحت میشود در دیتابیس متنهای فارسی را بصورت صحیح ذخیره کرد.
تذکر:
به یاری شما عزیزان و با توجه به نظرات، پیشنهادات، تذکرات و تصحیح هایتان این متن ویرایش خواهد شد.
این آموزش صرفا برای دوستانی هست که هنوز در دیتابیس خود دیتایی وارد نکرده اند و با طی نمودن مراحل فوق یک دیتابیس استاندارد خواهند داشت.
لطفا سوالات مربوط به اینکه چطور اطلاعات قبلی خود را که بصورت غیر استاندارد ذخیره کرده اید را در تاپیک دیگری دنبال نمایید ( البته هر طور مدیر محترم انجمن صلاح بدونند)
بعد از وصل شدن به دیتابیس و انتخاب Table مورد نظر حتما کد زیر را بعد از کد انتخاب جدول وارد کنید.
mysql_query("SET CHARACTER SET utf8;");
mysql_query("SET SESSION collation_connection = 'utf8_persian_ci'");
فایل پیوستی شامل 2 فایل میباشد:
فایل php که برای تست کردن مراحل بالا در نظر گرفته شده
فایل sql هم برای ساخت table و فیلدهای مورد نظر برای درج اطلاعات توسط فایل php موجود میباشد.پ.ن
لتفن از قلحهای املایی سرف نزر کنید :چشمک:
و در مورد انشا هم نمره بدین :خجالت:
بعد از چند روز جستجو در میان تاپیکهای انجمنهای مختلف ( مجید آنلاین - برنامه نویس - پرشین تولز ) بالاخره توانستم از میان پاسخها و جمع بندی مطالب، به تواناییهای زیر دست یابم.
هر چند که شاید این توانایی برای تعدادی از دوستان بسیار سهل و آسان باشد، اما این تاپیک را باز کردم که آن دسته از دوستانی که در این باره مشکل دارند بتوانند به خواسته خود برسند (مثل خودم ).
با انجام مراحل چند گانه ای که مطرح میکنم شما به گزینه های ذیل دست می یابید.
درج اطلاعات فارسی در دیتابیس
نمایش صحیح متون فارسی در صفحات سایت بصورت UTF-8 ( توسط کد برنامه نویس )
نمایش صحیح اطلاعات فارسی در phpMyAdmin
تهیه نسخه پشتیبان
بازیابی نسخه پشتیبانابتدا بایستی در phpMyAdmin یک دیتابیس تعریف کنید. ( کسانی که بر روی هاست میخواهند کار کنند باید از داخل Cpanel دیتابیس خود را تعریف نمایند).
http://img.majidonline.com/pic/82071/1.png
بعد از ساخته شدن دیتابیس باید نام Table را مشخص کنید و تعداد فیلدهایی که نیاز دارید را مشخص نمایید ( تصویر زیر ).
http://img.majidonline.com/pic/82074/2.png
باستی توجه داشته باشید که Collation تمام فیلدهایی که قرار هست در آینده مطالب فارسی در آن جای گیرد utf8_persian_ci باشد. همچنین Collation خود Table را هم utf8_persian_ci انتخاب نمایید. (در صورت نیاز می توانید Collation کل پایگاه داده را تغییر دهید - به شکل اول توجه نمایید) پس تا اینجا باید وضعیت Table شما به صورت تصویر زیر باشد.
http://img.majidonline.com/pic/82078/4.png
و همچنین وضعیت فیلدهایی که قرار هست متون فارسی را در خود جای دهند باید مانند تصویر زیر باشد.
http://img.majidonline.com/pic/82077/3.png
آن دسته از عزیزانی که میخواهد توسط فایل sql جداول و فیلدهای خود را بسازند ( استفاده از تب Import در phpMyAdmin ) توجه داشته باشند که باید فایل sql مربوط به دیتابیس خود را ویرایش نموده و فیلدهایی که قرار هست فارسی باشند را مانند زیر از:
http://img.majidonline.com/pic/82081/6.png
به این شکل تغییر بدهند.
http://img.majidonline.com/pic/82084/5.png
بسیار خوب، تا اینجا دیتابیس آماده شد. از این به بعد در مورد فایلهای PHP که کدهای ما در آن قرار دارد صحبت می کنیم.
اول از هر چیز باید توجه داشته باشید encoding صفحه ای که قرار هست اطلاعات را برای دیتابیس بفرستد حتما باید UTF-8 باشد. برای این منظور از کد زیر در tag هدر صفحات خود استفاده می کنیم.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
به عبارتی به این شکل:
http://img.majidonline.com/pic/82086/html.gif
و مرحله آخر مربوط می شود به فایل php شما که یونیکد باشد ( با مرحله قبل قاطی نکنید ) این مرحله با مرحله قبل تفاوت دارد. در مرحله قبل صحبت از encoding صفحه ارسال مطالب فارسی بود. اما در این مرحله در مورد ساختار خود فایل php صحبت می کنیم که به چه شکل پیش برویم که به مشکل بر نخوریم.
خب در اینجا باید اندکی توضیح اضافه بدهم.
وقتی شما یک فایل txt را در notepad ویندوز درست میکنید و مطلب فارسی در آن مینویسید، در هنگام ذخیره سازی باید از گزینه encoding موجود در پنجره save as برنامه notepad گزینه UTF-8 را انتخاب نمایید. ( تصویر زیر )
http://img.majidonline.com/pic/82087/notepad.gif
با انجام این عمل 3 کاراکتر در ابتدای فایل txt شما قرار خواهد گرفت که در برخی از editor ها قابل نمایش بوده و در برخی دیگر قابل نمایش نیست. به عنوان مثال من یک فایل txt که در آن کاراکترهای فارسی وجود دارد را در ادیتور Zend باز کردم. ( تصویر زیر )
http://img.majidonline.com/pic/82089/zend.gif
لازم به ذکر است که در مواقعی که شما از تابع Header در php استفاده میکنید بودن این چند کاراکتر اجرای اسکریپت php شما را متوقف میکند. به عنوان مثال من دستور زیر را در یک فایل که اون 3 کاراکتر در ابتدای آن قرار دارد را ذخیره کرده و اجرا میکنم ( مانند زیر )
header('Location: http://www.yahoo.com/');
با فراخوانی فایل مذکور و اجرای دستور بالا خطای زیر نمایش داده می شود.
Warning: Cannot modify header information - headers already sent by (output started at C:\script\test.php:1) in C:\script\test.php on line 2
اگر شما این 3 کاراکتر را با هر روشی حذف کنید، در فایل مذکور نمی توان فارسی تایپ کرد و نمایش داد . البته چرا، راهی وجود دارد، و آن استفاده از کدهای یونیکد بجای کاراکترهای فارسی میباشد. ( مانند زیر )
این فقط برای تست است
یا
&#1575;&#1610;&#1606; &#1601;&#1602;&#1591; &#1576;&#1585;&#1575;&#1610;
&#1578;&#1587;&#1578; &#1575;&#1587;&#1578;
که ملاحظه می فرمایید، این روش روش مطلوبی نیست.
من اینجا راهی را پیشنهاد میدهم که شما به راحتی یک فایل php داشته باشد که هم بتوانید در سورس برنامه خود فارسی را صحیح تایپ نمایید و هم اطلاعاتی که توسط این فایل php به داخل دیتابیس فرستاده میشود، بصورت صحیح ذخیره گردد. البته روشی را که در اینجا مطرح میکنم روش آنچنان اصولی و حرفه ای نیست ( خودم از این روش استفاده میکنم. البته فقط 1 بار این عمل را انجام داده ام که شرح خواهم داد )
شما بایستی وارد برنامه frontpage بشوید و قبل از هر کاری ابتدا کیبورد خود را در حالت فارسی قرار داده و متنی را تایپ نمایید ( بصورت فارسی ) در نتیجه کدهای HTML شما به این شکل تغییر میکند.
<html>
<head>
<meta http-equiv="Content-Language" content="fa">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1256">
<title>New Page 2</title>
</head>
<body>
<p>تست هست</p>
</body>
</html>
سپس به قسمت تنظیمات صفحه جاری رفته و تنظیمات را مانند شکل زیر ایجاد نمایید.
http://img.majidonline.com/pic/82093/frontpage.gif
کد شما بدینصورت تغییر خواهد کرد.
<html>
<head>
<meta http-equiv="Content-Language" content="fa">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>New Page 2</title>
</head>
<body>
<p>تست هست</p>
</body>
</html>
و در نهایت فایل مذکور را save نموده و پسوند فایل را از txt به php تغییر دهید ( نیازی نیست هر بار که میخواهید یک فایل جدید php ایجاد کنید این مراحل را پشت سر بگذارید. فقط و فقط یک فایل اینطوری درست کنید و برای ایجاد فایلهای بعدی فقط از این فایل یک کپی بگیرید.
من یک نمونه از این فایل را به این پست attach کرده ام.
حالا خیلی راحت میشود در دیتابیس متنهای فارسی را بصورت صحیح ذخیره کرد.
تذکر:
به یاری شما عزیزان و با توجه به نظرات، پیشنهادات، تذکرات و تصحیح هایتان این متن ویرایش خواهد شد.
این آموزش صرفا برای دوستانی هست که هنوز در دیتابیس خود دیتایی وارد نکرده اند و با طی نمودن مراحل فوق یک دیتابیس استاندارد خواهند داشت.
لطفا سوالات مربوط به اینکه چطور اطلاعات قبلی خود را که بصورت غیر استاندارد ذخیره کرده اید را در تاپیک دیگری دنبال نمایید ( البته هر طور مدیر محترم انجمن صلاح بدونند)
بعد از وصل شدن به دیتابیس و انتخاب Table مورد نظر حتما کد زیر را بعد از کد انتخاب جدول وارد کنید.
mysql_query("SET CHARACTER SET utf8;");
mysql_query("SET SESSION collation_connection = 'utf8_persian_ci'");
فایل پیوستی شامل 2 فایل میباشد:
فایل php که برای تست کردن مراحل بالا در نظر گرفته شده
فایل sql هم برای ساخت table و فیلدهای مورد نظر برای درج اطلاعات توسط فایل php موجود میباشد.پ.ن
لتفن از قلحهای املایی سرف نزر کنید :چشمک:
و در مورد انشا هم نمره بدین :خجالت: