PDA

View Full Version : فارسی با PHP MySQL



tanha2007
چهارشنبه 18 مهر 1386, 11:55 صبح
سلام.
اول ازهمه من زیاد جستجو نمودم، ولی مشکل من حل نشد...من از ابزارها زیر اسفاده میکنم:
i) Apache 2.2.4 (SERVER)
ii) PHP 5.2.3 + PECL
iii) SQLitemanager
iv) MySQL 5.0.41
v) Phpmyadmin
مربوط MySQL
1. من داتابیس MySQL را با Collation = utf8_persian_ci ساختم.
2. جدول خود را نیز با Collation = utf8_persian_ci ساختم.
3. فیلد ها را نیز با Collation = utf8_persian_ci ساختم.
4. تمام لغات فارسی درست میتونم ببینم و درست نشان داده میشوند

مربوط PHP
1. من دوصفحه PHP دارم، صفحه اول dictionary.php که charset=utf-8 میباشد، و صفحه دوم meaning.php که فقط شامل کدهای PHP میباشد.
2. من روی صفحه dictionary.php یک textField دارم که لغت انگلیسی را جهت جستجو وارد مینمایم و یک textarea که باید از صفحه meaning.php لغت فارسی را نشان دهد
3. من با استفاده از AJAX و PHP فرهنگ را ساختم ولی به عوض کلمات فارسی علامت ؟؟؟؟؟؟؟؟؟؟؟؟؟؟ را مشاهده مینمایم.

بنظر شما چکار باید کنم؟؟؟

tabib_m
چهارشنبه 18 مهر 1386, 12:42 عصر
فکر کنم اینجا رو جا انداخته باشی:


$connect=mysql_connect(.....);
mysql_query("SET CHARACTER SET utf8", $connect);


موفق باشید

tanha2007
چهارشنبه 18 مهر 1386, 13:02 عصر
فکر کنم اینجا رو جا انداخته باشی:


$connect=mysql_connect(.....);
mysql_query("SET CHARACTER SET utf8", $connect);


موفق باشید

سلام.
میشه لطفا بیشتر توضیح دهید؟

tabib_m
چهارشنبه 18 مهر 1386, 15:24 عصر
بعد از اتصال به دیتابیس توسط تابع mysql_connect شما باید کاراکتر ست دیتابیست رو مشخص کنی. که به وسیله ی این کد قابل تعیین هست:


mysql_query("SET CHARACTER SET utf8", $connect);


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

موفق باشید.

tanha2007
پنج شنبه 19 مهر 1386, 07:25 صبح
تشکر یک دنیا دوست گرامی...
بلی درست گردید

Mohajerx
پنج شنبه 19 مهر 1386, 11:25 صبح
نوشته های من به فارسی درست نمایش داده میشه اما وقتی که از این کد بعد از اتصال استفاده میکنم بکلی نوشته های فارسی درهم میشه. دلیل خاصی داره ؟ البته بدون استفاده از کد زیر اطلاعات به درستی نمایش داده میشود.

فیلدها رو من اونهایی که قرار هست اطلاعات فارسی در اون قرار بگیره رو روی utf8_general_ci تنظیم کردم از این نظر تغییراتی به نظرتون بهتر هست داده بشه یا همین مناسب هست؟


[mysql_query("SET CHARACTER SET utf8", $connect);

tabib_m
پنج شنبه 19 مهر 1386, 15:46 عصر
اگر شما کلیشن فیلدهاتون utf8_general_ci باشه، برای دریافت اطلاعات درست، به کد مذکور احتیاج هست. در غیر این صورت کد مذکور باعث میشه که اطلاعات فارسی خراب نمایش داده بشن.

اگر تا حالا کلیشن فیلدهاتون utf8_general_ci نبوده، بهتره که تغییرش ندید، چون تا به حال کاراکتر هایی که توی فیلدهای مذکور وارد شده ن به صورت عادی وارد شدن و اگر این کار رو بکنید، ممکنه اطلاعاتتون خراب بشه و یا حد اقل اطلاعاتی که قراره از این به بعد وارد بشه، با اطلاعاتی که قبلا ثبت شده بودن، تفاوت خواهند کرد و اونجاس که دیگه حسابی گیر میکنید :)

موفق باشید.

Mohajerx
پنج شنبه 19 مهر 1386, 15:58 عصر
ممنون البته من الان وقتی این کد رو بعد از اتصال قرار میدم باعث بهم ریختگی میشه. ( هرچند بصورت utf8_general_ci هست فیلدهای مربوط )

برای فعالیت با زبان فارسی بر روی دیتابیس بطور کلی و برای دراز مدت و انعطاف هرچه بهتر utf8_persian_ci بهتر هست برای استفاده و یا utf8_general_ci ؟

tabib_m
پنج شنبه 19 مهر 1386, 22:21 عصر
راستش جواب دقیقی ندارم
ولی تا اونجایی که میدونم بهتره که از utf8_persian_ci استفاده بشه، چون یک سری تنظیمات خاص مربوط به زبان فارسی رو شامل میشه...

pswin.pooya
پنج شنبه 19 مهر 1386, 23:43 عصر
سلام
فایلی php رو با فرمت utf8 ذخیره کن و چارست رو همون utf8_general بذار بمونه.
منم قبلا این مشکل رو داشتم . اینکار رو کردم و مشکلم حل شد

mehran_337
دوشنبه 23 مهر 1386, 14:16 عصر
توسط ارسال متغیر در url مجبورم چنین لینکی بزارم :
مهر 83 =www.sitname.com?term (http://www.sitname.com?term)
بعد در صفحه ای دیگر از متغیر term$ باید استفاده کنم.
اما این کلمه وقتی ارسال می شه از قراره معلوم یونیکدش بر می گرده چون از متغیر term در برنامه دیگه نمی تونم استفاده کنم مطمئنا در دیتابیسم عبارت "مهر 83" هست اما چون پارامتر ارسالی یونیکدش برگشته نمی تونه جواب بده.
نا گفته نماند این متغیر (term) ابتدا توسط فرم post می شود و در صفحه RES.php به درستی استفاده می شود . اما در صفحه ای دیگر لیست ترم ها بصورت لینک وجود دارد :
مهر 83
مهر 84
مهر 85
مهر 86

حال وقتی روی هر لینک کلیک می کنیم فقط همان ترم را نمایش می دهد یعنی متغیر TERM مجددا باید مقدار دهی شودو توسط همان لینکی که اول گفتم (URL) این متغیر ارسال می شود و باقیه ماجرا ...

peyman1987
دوشنبه 23 مهر 1386, 15:20 عصر
توسط ارسال متغیر در url مجبورم چنین لینکی بزارم :
مهر 83 =www.sitname.com?term (http://www.sitname.com?term)
بعد در صفحه ای دیگر از متغیر term$ باید استفاده کنم.
اما این کلمه وقتی ارسال می شه از قراره معلوم یونیکدش بر می گرده چون از متغیر term در برنامه دیگه نمی تونم استفاده کنم مطمئنا در دیتابیسم عبارت "مهر 83" هست اما چون پارامتر ارسالی یونیکدش برگشته نمی تونه جواب بده.
نا گفته نماند این متغیر (term) ابتدا توسط فرم post می شود و در صفحه RES.php به درستی استفاده می شود . اما در صفحه ای دیگر لیست ترم ها بصورت لینک وجود دارد :
مهر 83
مهر 84
مهر 85
مهر 86

حال وقتی روی هر لینک کلیک می کنیم فقط همان ترم را نمایش می دهد یعنی متغیر TERM مجددا باید مقدار دهی شودو توسط همان لینکی که اول گفتم (URL) این متغیر ارسال می شود و باقیه ماجرا ...


دوست من متوجه نمیشم مشکل شما چیه؟؟؟
شما توی صفحه مورد نظری که متغیر term رو بهش فرستادین نمیتونین ازش استفاده کنین؟
بهتر و بیشتر توضیح بدین تا مشکلتون راحتتر حل بشه.
کدتون رو هم بزارین.

mehran_337
سه شنبه 24 مهر 1386, 08:07 صبح
این برنامه مشاهده نمرات از طریق سایت هست و کل برنامه بصورت require می باشد و چندین فایل تو در تو دارم . پ متغیر های اولیه من هم در صفحات استفاده می شوند.

متغیر های برنامه که بر اساس آنها کواری انجام می شود code , shsh , term . یعنی در ابتدا دانشجو توسط کد دانشجویی و شماره شناسنامه و انتخاب اینکه نمرات کدام ترم را می خواهد ببیند وارد برنامه می شود .
توسط post این سه متغیر مقدار دهی می شود .
یک کواری از نمرات ترم مورد نظر گرفته می شود و نمرات ترم نشان داده می شود.


select * from SHEET1 where shsh=$shsh1 and code=$code1 and TERM ='$term1'

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


SELECT TERM FROM SHEET1 where shsh=$shsh1 and code=$code1 GROUP BY TERM

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


<a href="result.php?term1=<?=$row2[TERM]?>"><?=$row2[TERM]?></a>

یعنی به برنامه بفهماند حالا همین دانشجو می خواهد ترم دیگر را تماشا کند فقط متغیر term1 مقدارش تغییر می کند و code , shsh همان است.
تا قبل از اینکه کاربر کلیک کند همه چیز درست است . اما به محض اینکه کلیک می کند این سه متغیر مقدارش خالی می شود (این مشکل اول)
البته توسط لینک فوق و ارسال متغیر term به صفحه این متغیر با مقدار جدید جایگزین می شو د اما انگار ارسال عبارت رشته ای "مهر 84" به آدرس بار و دریافت آن توسط صفحه باعث تغییر یونیکد شده و این عبارت با همین ترکیب در دیتابیس را برابر نمی داند و پیدا نمی کند.
من اصراری بر روش خودم ندارم . من آنچه که مهم است این است که لیست ترم ها بصورت لینک دیده شود و کاربر کلیک کرد عملیات صفحه result با محتوای جدید متغیر term از سر گرفته شود .
با تشکر از همه دوستان...

mehran_337
سه شنبه 24 مهر 1386, 17:09 عصر
با تشکر از دوستان . حل شد ...