مشکل در کوئری گرفتن از دیتای فارسی

ARTA_ADOBE CO

Active Member
چرا فیلد هایی که فارسی ثبت شده موقع کوئری گرفتن به حالت ??? در میاد ؟
اینم قسمت php صفحه...

PHP:
<?php    
        $user = "soltan_arta";
        $pass = "1234";
        $db = "soltan_sample";
        $link = mysql_pconnect("localhost",$user,$pass);
            if(! $link )
                die("could not connect to mySQL");

        if (! mysql_select_db($db,$link))
            die ("couldn't open DATA BASE".mysql_error());
            
            
    $result = mysql_query("SELECT * FROM sofal");
    $num_rows = mysql_num_rows($result);
    print "در حال حاضر $num_rows ردیف در این قسمت است";
    print '<table width="634" border="0" cellspacing="10" cellpadding="5">';
    while( $sofal_rows = mysql_fetch_array($result)){
    print '<tr>';    
    echo "<td width=\"323\" bgcolor=\"#DED1BE\" class=\"style9\"><div align=\"center\">سفارش به نام :". $sofal_rows["name"] ."</div></td>";
    print '<td width="101" bgcolor="#DED1BE" class="style9"><div align="center"><a href="#">بررسی سفارش</a></div></td>';
    print '<td width="140" bgcolor="#DED1BE" class="style9"><div align="center"><a href="#">حذف و رد سفارش</a></div></td>';
    print '</tr>';    
    }
    print '</table>';
    
mysql_close($link);    
        
?>
 

ARTA_ADOBE CO

Active Member
وقتی از طریق فرم دیتا ها رو میفرستم به mysql و ثبت میشه فارسی رو درست نمایش میده...
اما وقتی یک فیلد رو توسط phpMyAdmin پر میکنم موقع کوئری گرفتن برای نمایش فیلد ها فارسی به علامت سوال تبدیل میشه...

Collation همه فیلد ها روی utf8_persian_ci است وMySQL connection collation هم روی همین تنظیم شده...
 

ARTA_ADOBE CO

Active Member
حالا بخوام دستی دیتا وارد کنم چی کار کنم که فارسی رو درست وارد کنه ؟ و نخوام از php my admin استفاده کنم؟
شما خودت چی کار میکنی عزیز ؟
 
دوست عزیز كافیه كه بعد از كانكت شدن این query را اجرا كنید.

کد:
mysql_query("SET NAMES 'utf8';");
دقت كنید كه حداقل فیلدهایی كه میخواهید در آنها مقادیر فارسی بریزید utf8_general_ci (در این حالت sort فارسی درست عمل نمیكند) باشند البته با utf8_persian_ci (در این حالت sort درست است) جواب بهتری خواهید گرفت.

در ضمن اطلاعاتی هم كه میخواهید بر روی دیتابیس insert كنید باید utf8 باشند یعنی مثلا اگر مقادیر یك فرم هستند باید encoding صفحه ای كه فرم در آن است utf-8 باشد.
 
آخرین ویرایش:

ARTA_ADOBE CO

Active Member
آقا حالا برعکس شد !
اونایی که با دست وارد کردم درست شد اما اونایی که با فرم ریخت به هم !
ببین : http://soltan-soundlight.ir/CP/sofal.php

فیلدها روی utf8_persian_ci تنظیم هست...


یه سوال » چرا اسم این دستور SET NAMES هست؟ چرا name ؟ شاره داره به مقادیر فیلد ها ؟ (تا حالا این کوئری رو ندیده بود !)
 
آخرین ویرایش:
دستور set name در حقیقت انكدینگ connection رو تغییر میده برای اطلاعات بیشتر این صفحه رو مطالعه كن:
http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html
دوست عزیز همونطور كه گفتم فرم ورود اطلاعات شما حتما باید در صفحه ای باشد كه انكدینگ آن صفحه utf-8 باشد ، دقت كنید كه windows-1256 مشكل ایجاد میكند.

بگذارید كاملا براون شرح بدم :

1- collation دیتابیس باید حتما utf8 باشد
2-charset تیبل هم باید utf8 باشد.
3- collation فیلدهایی كه میخواهید در آنها از فارسی استفاده كنید باید حتما utf8 باشد ، برای استفاده از sort فارسی ترجیحا از utf8_persian_ci استفاده كنید.
4-set name utf8 باید هر بار بعد از اتصال به دیتابیس اجرا شود.
5- انكدینگ صفحاتی كه فرمهای ورود اطلاعات در آنها وجود دارند باید حتما utf-8 باشد .

من چند سال است كه با این روش كار میكنم و هیچ مشكلی ندارم ، حتی چندین بار مشكل عرب زبانها رو در فروم mysql به همین طریق حل كردم ! اینم یكی از لینكاهاش :wink:
در ضمن در مورد phpmyadmin معمولا مشكل از آنجا ناشی میشود كه شما با كد پیج عربی ورود اطلاعات میكنی و phpmyadmin با كد پیج utf-8 وارد میكند برای همین علامت سئوال میبینید.
 
آخرین ویرایش:

ARTA_ADOBE CO

Active Member
از بابت وقتی که گذاشتید بسیار ممنونم...

تمام مراحلی که گفتید رو به طور کامل میدونستم و انجام دادم دوست عزیر.(به غیر از اون SET که لطف کردید معرفی کردید)

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

اما كد پیج عربی هنگام ورود اطلاعات...

به ظاهر فکر میکنم وقتی phpMyAdmin باز میشه کد پیچ این باشه :
en-iso-8859-1 چون این رو به متغیری به نام lang میفرسته...

کود پیج رو با فایرفاکس رو UTF-8 میزارم و بعد وارد میکنم اما بازم هم...
خودتون الان با این روش راحت کار میکنید ؟ یعنی پر کردن دستی فیلد ها با phpMyadmin ؟



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

http://oxygenws.com/blog/archives/54-phpMyAdmin.html
به نظرم داره به یک باگ اشاره میکنه و حذف یه تابع از این CMS ...




»آیا CMS دیگری برای دستکاری database ها هست ؟ (البته معتبر؟)
 
آخرین ویرایش:
دوست عزیز من اون مطلب رو خوندم این دوستی كه مطلب رو نوشته دقیقا بر عكس عمل كرده ، می تونم حدث بزنم كه قضیه چی بوده ...
ایشون charset تیبشون روی latin بوده و وقتی در حالت utf8 توی phpmyadmin اطلاعات رو وارد میكردند اطلاعات خراب میشده چرا ؟
چون phpmyadmin هم از set name برای تعیین انكدینگ connection استفاده میكنه و چون charset تیبیل ایشون latin بوده ، phpmyadmin از 8859-1 برای charset استفاده میكرده.

من فكر میكردم مشكل شما در ورود اطلاعات از طریق فرم است اما بنظر میرسد شما با phpmyadmin مشكل دارید اگر این طور است به احتمال زیاد charset دیتابیس و یا default collation شما بر روی latin ست شده برای همین هم phpmyadmin صفحات رو با انكدینگ 8859-1 به شما نشون میده.
ببینید اگر دیتابیس شما بر روی latin ست شده باشد و شما هم در هنگام دریافت و ورود اطلاعات از set name استفاده نكنید تنها مشكلی كه پیش میاد اینه كه اطلاعات بصورت كاركتر كدهای utf8 در iso-8859-1 ثبت میشه یعنی اینكه وقتی با phpmyadmin به این اطلاعات نگاه كنید اینجوری می بینیدشون :
1521&1231&22&&1314&1272&1101&&22&&1314&1272&1101&&22&&1314&1272&1101&

در اینحالت شما برای نمایش اطلاعات و حتی ورود اطلاعات از طریق فرم های وبی مشكلی ندارید اما چیزی كه هست sort درست كار نمیكنه چون عملا اطلاعات فارسی نیست حتی ممكنه تو بعضی مواقع به مشكل search هم بر بخورید و البته در این حالت امكان نداره بتونید با phpmydmin مقادیر فارسی در تیبل وارد كنید (به دلیل وجود همون set name)

اگر در حال حاظر شما اطلاعات را در تیبلهاتون به شكلی كه در بالا عرض كردم (1521&.....) میبینید نشانه اینه كه اطلاعات شما latin base است و در این حال دو راه دارید:
1- از خیر اطلاعات حاضر بگذرید ، تیبل و سرور را utf8 كنید و اطلاعات جدید را با اجرای set name وارد كنید كه در این صورت همه چیز حل می شودو بنظر بنده بهترین راه است.
2- اگر حجم اطلاعات حاضر زیاد است و امكان ورود مجدد اونها نیست باید به همون روشی كه دوستمون گفت فعلا set name نرم افزار phpmyadmin رو حذف كنی تا اطلاعاتی كه وارد میكنید با همون انكدینگ خودشون وارد بشوند البته برای ورود اطلاعات ممكن است مجبور بشوید مثلا از dreamweaver استفاده كنید به این شكل:
- یك فایل جدیدی بسازید و انكدینگ رو بگذارید روی 8859 بعد شروع كنید اطلاعات رو توی dreamweaver به فارسی تایپ كنید ، بعد از تایپ اگه source رو نگاه كنید می بینید كه اطلاعات به صورت كاركتر كدهای utf8 ثبت شده اند (1521&1322&.......)
حالا میتوانید این اطلاعات را از source بر روی فیلد phpmyadmin كپی كنید و ثبت كنید.
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا