مشکل در دریافت کارکتر های فارسی از کاربر در ie8

pix07

Member
با سلام
من مدتی پیش یک برنامه آجاکس برای جستوجو در دیتابیس نوشتم این برنامه در مرورگرهای firfox , opera , googlechorome
در ست کارمیکنه اما در IE8 وقتی کاربری متنی رو به فارسی در فیلد جستوجو وارد میکنه این متن کارکتر هاش
به شکل زیر وارد برنامه میشود
سلام ==> ��

لازم به ذکره که از تابعه

mysql_query('SET NAMES utf8');
هم در کد صفحه استفاده کردم
و همچنین خاصیت meta صفحه رو به این شکل ست کردم
charset=utf-8"


مشکل از کجاست ؟

ببینید من این مورد رو حتی بدون دیتا بیس هم انجام دادم یه رشته فارسی رو به صورت آجاکسی به یه صفحه دیگه فرستادم در IE8 دوباره همین مشکل هست یعنی رشته ارسالی توسط صفحه html به صفحه php پس از دریافت و چاپ به شکل کارکتر زیر نمایش داده میشه
��
برای نمونه این مثال رو توی IE8
امتحان کنید
http://www.w3schools.com/php/php_ajax_livesearch.asp
 

ziXet

مدیر انجمن PHP/MYSQL
با سلام
من مدتی پیش یک برنامه آجاکس برای جستوجو در دیتابیس نوشتم این برنامه در مرورگرهای firfox , opera , googlechorome
در ست کارمیکنه اما در IE8 وقتی کاربری متنی رو به فارسی در فیلد جستوجو وارد میکنه این متن کارکتر هاش
به شکل زیر وارد برنامه میشود
سلام ==> ��

لازم به ذکره که از تابعه

mysql_query('SET NAMES utf8');
هم در کد صفحه استفاده کردم
و همچنین خاصیت meta صفحه رو به این شکل ست کردم
charset=utf-8"


مشکل از کجاست ؟

ببینید من این مورد رو حتی بدون دیتا بیس هم انجام دادم یه رشته فارسی رو به صورت آجاکسی به یه صفحه دیگه فرستادم در IE8 دوباره همین مشکل هست یعنی رشته ارسالی توسط صفحه html به صفحه php پس از دریافت و چاپ به شکل کارکتر زیر نمایش داده میشه
��
برای نمونه این مثال رو توی IE8
امتحان کنید
http://www.w3schools.com/php/php_ajax_livesearch.asp
این خیلی به PHP مربوط نمیشه
شما باید قبل از ازسال پارامترها اونهارو با تابع encodeURI انکد کنی و بفرستی
پیشنهاد میشه از jQuery استفاده کنی تا این مشکلات پیش نیاد

موفق باشید
 

pix07

Member
با تشکر از شما
میشه بیشتر توضیح بدید و یه مثال ذکر کنید؟
 

ziXet

مدیر انجمن PHP/MYSQL
با تشکر از شما
میشه بیشتر توضیح بدید و یه مثال ذکر کنید؟
مشکل شما با جاوااسمریپته نه php
شما قبل از ارسال پارامترها به صورت POST یا GET اونو با تابع encodeURI کد کن
اگه تو گوگل هم اسم تابع رو سرچ کنی نحوه استفادش میاد
 

pix07

Member
با سلام مجدد

من یسری جستوجو کردم و توی این صفحه http://php.net/manual/fr/function.urldecode.php
تا بع زیر رو پیدا کردم
PHP:
function to_utf8( $string ) { 
// From http://w3.org/International/questions/qa-forms-utf-8.html 
    if ( preg_match('%^(?: 
      [\x09\x0A\x0D\x20-\x7E]            # ASCII 
    | [\xC2-\xDF][\x80-\xBF]             # non-overlong 2-byte 
    | \xE0[\xA0-\xBF][\x80-\xBF]         # excluding overlongs 
    | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte 
    | \xED[\x80-\x9F][\x80-\xBF]         # excluding surrogates 
    | \xF0[\x90-\xBF][\x80-\xBF]{2}      # planes 1-3 
    | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15 
    | \xF4[\x80-\x8F][\x80-\xBF]{2}      # plane 16 
)*$%xs', $string) ) { 
        return $string; 
    } else { 
        return iconv( 'CP1252', 'UTF-8', $string); 
    } 
}

که این تابع رو تو صفحه دوم یا همون صفحه php که مقادیر ارسالی بروش آجاکس از صفحه اول رو دریافت میکنه
PHP:
$string= to_utf8($_GET['Farsistring']);
با کد بالا رشته فارسی رو دریافت کردم چاپ کردم اینبار خروجی تو مرورگرای دیگه مثل قبل درست بود اما توی IE8 به شکل زیر نمایش داده میشه
قبل از استفاده از تابع

سلام => ��

بعد از استفاده از تابع
سلام => ÓáÇã

حالا باید چیکار کرد؟
 

pix07

Member
با تشکر از zixet جان کد جواب داد
چون حدس میزدم افراد دیگه ای هم با این مشکل مواجه شن ، وظیفه خودم کمی دونستم تشریح کنم
PHP:
encodeURI(str)
دستور بالا رو در کد جاوای مربوط به صفحه اول که وظیفه دریافت مقادیر از کاربر و ارسال اون به صفحه دوم رو داره
به همین سادگی
مشکل ما با IE8 حل شد
 

ziXet

مدیر انجمن PHP/MYSQL
با تشکر از zixet جان کد جواب داد
چون حدس میزدم افراد دیگه ای هم با این مشکل مواجه شن ، وظیفه خودم کمی دونستم تشریح کنم
PHP:
encodeURI(str)
دستور بالا رو در کد جاوای مربوط به صفحه اول که وظیفه دریافت مقادیر از کاربر و ارسال اون به صفحه دوم رو داره
به همین سادگی
مشکل ما با IE8 حل شد
عزیز من چندبار گفتم مشکل از جاوااسکریپته!
مشکل server side نبود!

مرسی از اینکه راه حل رو هم گذاشتی

موفق باشی
 

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

بالا