ورود

View Full Version : سوال: مشکل document.write با utf-8



ravand
شنبه 01 شهریور 1393, 11:03 صبح
سلام
من یه ابزار نوشتم در این ادرس:
http://site.ir/load/load.php (http://ravand-design.ir/project/load/load.php)
ادرس بالا را با مرورگر کروم یا سفری یا اپرا باز کنید.
بعد از انتخاب یکی از آیکن ها وقتی روی دکمه ی سبز رنگ پیش نمایش ابزار کلیک میکنم. یه پنجره باز میشه و یه عکس رو نشون میده. به همراه یک متن. اگه در مرورگر کروم یا سفری یا اپرا باشید حروف بهم ریخته به شما نمایش میده:
122566
ولی با اکسپلورر و فایرفاکس این مشکل رو نداشت!
دلیل اینه این سوال رو اینجا پرسیدم برای این بود که مشکل از سمت کلاینت هست.
یعنی مشکل من از این کد زیر در صفحه ی load.php هست:

DispWin.document.write("<script type='text/javascript' charset='UTF-8' src='http://site.ir/load/pish.php?matne=" + matno + "&load=" + load + "&tasavir="+tasavir+"&delkhah="+delkhah+"'><\/sc" + "ript>");

چونکه وقتی مقدار متن فارسی را ارسال میکنه به صورت utf-8 نیست!
به اینکه از این دستور هم استفاده کردم مشکل حل نشده:

<meta charset="utf-8">
حتی در دستور document.write هم ازش استفاده کردم فایده ای نداره.
برای اینکه متوجه بشم مشکل از این صفحه هست و کاری به سمت سرور نداره امدم اینطوری کردم:
http://site/load/pish.php?matne=%D9%85%D8%AD%D9%85%D8%AF%D8%B1%D8%B 6%D8%A7&load=%22%20+%20load%20+%20%22&tasavir=%22+tasavir+%22&delkhah=%22+delkhah+ (http://ravand-design.ir/project/load/pish.php?matne=%D9%85%D8%AD%D9%85%D8%AF%D8%B1%D8%B 6%D8%A7&load=%22%20+%20load%20+%20%22&tasavir=%22+tasavir+%22&delkhah=%22+delkhah+)
همینطوری که می بینید متن محمدرضا در بین کدها نمایش داده شد. پس نتیجه می گیریم که عیب از دستور document.write در صفحه ی load.php هست . که با utf-8 سازگار نیست.
لطفا راهنماییم کنید خیلی کارم گیره.
متشکرم.

دانیال دزفولی
شنبه 01 شهریور 1393, 11:10 صبح
به تگ اسکریپت چارست بدید

ravand
شنبه 01 شهریور 1393, 11:34 صبح
به تگ اسکریپت چارست بدید
منظورتون رو متوجه نمیشم.
من این کاری رو که میگید کردم. کدش رو هم براتون گذاشتم:
DispWin.document.write("<script type='text/javascript' charset='UTF-8' src='http://site.ir/project/load/pish.php?matne=" + matno + "&load=" + load + "&tasavir="+tasavir+"&delkhah="+delkhah+"'><\/sc" + "ript>");


اینو منظورتونه؟
<script type='text/javascript' charset='UTF-8'
یا چیز دیگه ای منظورتون بود؟

ABZiko
شنبه 01 شهریور 1393, 14:19 عصر
توی صفحه ای که قراره ارسال بشه این رو بنویسید :


<?php header('Content-Type: text/html; charset=utf-8'); ?>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

ravand
شنبه 01 شهریور 1393, 14:43 عصر
:لبخند: آرزو به دلمون موند یکی درست سوال ما رو بخونه بعد جواب بده!
شما خیلی منو مبتدی فرض کردی داداش :لبخند:
بالاخره خودم تونستم سمت سرور این مشکل رو حل کنم. ولی فکر میکردم سمت کلاینت هم میشه کاری کرد.

ABZiko
شنبه 01 شهریور 1393, 14:46 عصر
قصد توهین نداشتم عذر می خوام.

ravand
شنبه 01 شهریور 1393, 15:17 عصر
قصد توهین نداشتم عذر می خوام.
نه خواهش میکنم این چه حرفیه؟ :لبخند:
من اعتقاد دارم هیچ کس حتی حرفه ایش نمیتونه بگه که همه چی رو در مورد برنامه نویسی میدونه . شاید ساده ترین چیزها هم باشه که برخی از حرف ای ها تا حالا باهاش برخورد نکردن.
ببیند من در سمت سرور از این تابع استفاده کردم: mb_convert_encoding مشکل منو حل کرد ولی هکر میتونست از حملات xss استفاده کنه. پس امدم اینطوری کردم:

<?php
$text = "; &#1705 ;&#1606 ;&#1740 ;&#1583 ;...";
$string = mb_convert_encoding($text, 'UTF-8', mb_detect_encoding($text));
echo htmlentities($string, ENT_QUOTES, 'UTF-8', false);
?>

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