PDA

View Full Version : نمایش نادرست حروف فارسی وقتی utf ذخیره می شوند



mohammad-gh
یک شنبه 21 فروردین 1390, 17:41 عصر
با سلام

این نمونه صفحه نمایش اطلاعات است : http://fardayeno.org/topstudent
اطلاعات سطور ی که درست نشان داده می شود مربوط به وقتی است که با کدینگ latin1 وارد شده و اطلاعاتی که درست نشان داده نمی شود مربوط به کدینگ UTF است
این هم نمونه اطلاعات در بانک اطلاعات است

68545
حال برای نمایش این اطلاعات با فایل php جه کدی باید بنویسم

رضا قربانی
یک شنبه 21 فروردین 1390, 19:19 عصر
بانکت رو از نوع utf8-general_ci بذار و موقع ارسال به بانک هم نمی خواد با utf ارسال کنی

phpweb
یک شنبه 21 فروردین 1390, 20:47 عصر
بانکت رو از نوع utf8-general_ci بذار و موقع ارسال به بانک هم نمی خواد با utf ارسال کنی

به غیر از این مطلب، قبل از ارسال کوئری باید کد زیر رو وارد کنید.


mysqli_set_charset($cxn, "utf8")

mohammad-gh
دوشنبه 22 فروردین 1390, 11:09 صبح
راستش شاید من یه کم خوب توضیح ندادم
من دارم برنامه ای می نویسم که اطلاعات سایت رو از داخل یک برنامه ویندوز (win app) به سایت می فرسته
مثلا اخبار سایت رو تو برنامه می نویسم و از اونجا می فرستم که برای اینکار باید نوع UTF بفرستم جون
وقتی می خواهم لیست اخبار وارد شده به سایت رو تو برنامه ببینم , برنامه تحت ویندوز فقط اطلاعاتی رو که با این فرمت فرستاده شده رو می تونه درست نشون بده
و اطلاعاتی که تو بانک به صورت کج و کوله هست رو همونطور میاره
پس فکر می کنم الان باید راهی پیدا کنم کهخ اطلاعات رو و وب درست نشون بده ؟ درسته!

phpweb
دوشنبه 22 فروردین 1390, 11:53 صبح
راستش شاید من یه کم خوب توضیح ندادم
من دارم برنامه ای می نویسم که اطلاعات سایت رو از داخل یک برنامه ویندوز (win app) به سایت می فرسته
مثلا اخبار سایت رو تو برنامه می نویسم و از اونجا می فرستم که برای اینکار باید نوع UTF بفرستم جون
وقتی می خواهم لیست اخبار وارد شده به سایت رو تو برنامه ببینم , برنامه تحت ویندوز فقط اطلاعاتی رو که با این فرمت فرستاده شده رو می تونه درست نشون بده
و اطلاعاتی که تو بانک به صورت کج و کوله هست رو همونطور میاره
پس فکر می کنم الان باید راهی پیدا کنم کهخ اطلاعات رو و وب درست نشون بده ؟ درسته!

اصول کار اینه:

تگ زیر رو توی صفحاتتون قرار بدید.

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


چارست جدولها و ستونها رو بصورت تعریف کنید:utf8_unicode_ci

قبل از ارسال کوئری کوئری زیر رو ارسال کنید:


mysqli_set_charset($cxn, "utf8")

توابعی مثل htmlentitise رو هم بصورت زیر فراخوانی کنید تا بتونن مقادیر UTF-8 رو تضخیص بدن.



htmlentities($str, ENT_QUOTES,'UTF-8');
htmlspecialchars($str, ENT_QUOTES,'UTF-8');

mohammad-gh
سه شنبه 23 فروردین 1390, 11:01 صبح
سلام و ممنون از توجهتون
این وقای هست که دارم اطلاعات را می فرستم


"SET NAMES 'utf8' COLLATE 'utf8_general_ci'"

این هم تصویری از ساختار بانک در mysql
68619

همه رو به صورت 'utf8_general_ci' تعریف کردم
یک نکته :
این که داده ها به صورت فارسی در بانک نشون داده میشه ، غیر طبیعی نیست!

این کد صفحه من


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" dir="rtl">
<head>

<meta http-equiv="content-type" content="text/html; charset=utf-8">

<meta http-equiv="Content-Language" content="fa">
<style>
body{
background:#ffffff;
margin:0;
padding:0;
color:#000000;
font-family:tahoma,sans-serif;
direction:rtl;
}
</style>


<body >

<?php
$link = mysql_connect('localhost', 'userbank', 'pass');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db("نام تیبل") or die('Can Not To Database');

?>



<table border="0" cellpadding="0" cellspacing="0" align="center" width="90%" >
<tr> <td align="center" valign="top" >


<table border="0" cellpadding="0" cellspacing="1" bordercolor="#000000" width="80%">
<tr bgcolor="#4a4c4c" height="30" style="color:#FFFF06;padding-top:2px" align="center">
<td >رديف</td> <td >نام دانشجو</td> <td>اطلاعات</td> </tr>
<?
$query120 = "SELECT * FROM topstudent order by id";
$result120 = mysql_query($query120) or die('ظ…ط³ط§ط¨ظ‚ظ‡ ظپط¹ط§ظ„ ط§ظٹط¬ط§ط¯ ظ†ط´ط¯ظ‡ ط§ط³طھ');

$count=mysql_num_rows($result120);
$i=1;
while ($row=mysql_fetch_array($result120))
{


$namestu=$row['namestu'];

$namestu=htmlentities($namestu, ENT_QUOTES,'UTF-8');
$infostu=$row['infostu'];

$infostu=htmlspecialchars($infostu, ENT_QUOTES,'UTF-8');

if ($i%2==0){

echo" <tr bgcolor=\"#e5fa98\" height=\"25\">";
}else{

echo" <tr bgcolor=\"#ffffff\" height=\"25\">";

}

?>

<td align="center" valign="middle" width="20" height="25" >
<?php echo $i ; ?> </td>
<td align="center" valign="middle" width="110" ><font face="tahoma"> <?php echo $namestu ; ?> </font></td>
<td align="left" valign="middle" width="110" height="25" > <?php echo $infostu ; ?> </td>
</tr>
<?php
$i++;
} ?>
</table> </td></tr> </table>
<hr>
</body>
</html>


همانطور که میبینید از اون دو تا تابع هم استفاده کردم

mohammad-gh
جمعه 26 فروردین 1390, 19:44 عصر
کسی نیست دیگه راهنمایی کنه

mohammad-gh
جمعه 26 فروردین 1390, 20:46 عصر
آقا منمشکلم با این کد که بعد از کانکت به دیتا بیس می نویسیم حل شد


mysql_query("SET NAMES 'utf8'", $link);
ممنون از همتون