PDA

View Full Version : مشکل در ذخیره کردن مقادیر فارسی توی پایگاه داده



idocsidocs
پنج شنبه 20 آبان 1389, 15:59 عصر
سلام

من برای ذخیره کردن مقادیر فارسی توی پایگاه داده موارد زیر رو رعایت می کنم ولی باز هم مقادیر فارسی بخوبی توی پایگاه داده ذخیره نمی شن:

من از XAMPP استفاده می کنم.

تگ متا رو توی همه صفحات بکار می برم.


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


همه صفحات و اسکریپتها رو با فرمت UTF-8 ذخیره می کنم. و برای اینکه موقع کارکردن با توابع هدر با مشکل مواجه نشم به کمک نرم افزار ++notepad فرمت همه صفحات و اسکریپتها رو بصورت
Encode in UTF-8 Without BOM تعریف می کنم.

بعد از تماس با پایگاه داده از کوئری زیر استفاده می کنم:
$q = "SET NAMES 'utf8'";
mysqli_query($con, $q);


و بالاخره اینکه برای دیتابیس، جدولها و ستونها کلکشن رو بصورت utf8_unicode_ci تعریف می کنم. کلکشنهای زیر رو هم امتحان کردم ولی نتیجه ای نداشت.
utf8_general_ci
utf8_persian_ci


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

هر کاری که فکر می کردم انجام دادم ولی مشکل حل نشد. اگه چیزی به ذهن می رسه لطفا راهنماییم کنید؟

اسکریپتهایی که استفاده می کنم رو در ادامه نوشتم:



پس از زدن دکمه درج پيام، داده هاي پيام به اسکريپت زیر داده مي شن


<?php
ob_start();
session_start();
$_POST[userid] = $_SESSION[userid];
include('dbinfo.inc');
$cxn = mysqli_connect($host,$user,$password, $database)
or die ("امکان تماس با سرور وجود ندارد");
$q = "SET NAMES 'utf8'";
mysqli_query($cxn, $q);
$sql = "INSERT INTO message ($fields) VALUES (\"$values\")";
$result = mysqli_query($cxn,$sql)
or die("امکان انجام درخواست وجود ندارد: ".mysqli_error($cxn));
$_POST['sent_message'] = "";
$_POST['sent_title'] = "";
$_POST['php_message'] = 'پيام شما ثبت شد، اکنون مي توانيد يک پيام ديگر وارد کنيد';
extract($_POST);
include('user.php');
exit();
}
}
?>



اين کد حاوي فرم دريافت اطلاعات هست


<?php ob_start(); ?>
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
session_start();
include('dbinfo.inc');
$cxn = mysqli_connect($host,$user,$password,$database)
or die ("امکان تماس با سرور وجود ندارد");
$sql = "select * from register where (userid ='$_SESSION[userid]')";
$result = mysqli_query($cxn,$sql)
or die("امکان انجام درخواست وجود ندارد: ".mysqli_error($cxn));
$sname = mysqli_fetch_row($result);
?>
<title><?php echo 'سلام'."&nbsp;"."$sname[10]"; ?></title>
</head>

<body>
<div id="center">
<form id="form1" name="form1" method="post" action="Message.php">
<table id="t" width="440" border="0" class="news"><?php
$php_message = $_POST['php_message'];
$sent_title = $_POST['sent_title'];
$sent_message = $_POST['sent_message'];
?>
<tr>
<td width="364" align="right">ارسال پيام
</td>
<td width="66" align="left"></td>
</tr>
<tr>
<td align="right"></td>
<td align="right">&nbsp;</td>
</tr>
<tr>
<td align="right"><p class="red"><?php echo "$php_message" ?></p></td>
<td align="left">&nbsp;</td>
</tr>
<tr>
<td align="right"><input name="sent_title" type="text" id="sent_title" value="<?php echo "$sent_title" ?>" size="40" maxlength="100" /></td>
<td align="left">عنوان پيام</td>
</tr>
<tr>
<td align="right"><label>
<textarea name="sent_message" id="sent_message" cols="40" rows="5"><?php echo "$sent_message" ?></textarea>
</label></td>
<td align="left">متن پيام</td>
</tr>
<tr>
<td align="right"><label>
<input type="submit" value="درج پيام" />
</label></td>
<td align="left"><input name="submit" type="hidden" id="submit_sent_message" value="yes" /></td>
</tr>
</table>
</form>
</body>
</html>

funpatogh
پنج شنبه 20 آبان 1389, 20:04 عصر
بهتره که فایلتون رو اینجا بگزارید
charachter set :utf-8 unicode
collation: utf8_percian_ci

idocsidocs
پنج شنبه 20 آبان 1389, 21:46 عصر
بهتره که فایلتون رو اینجا بگزارید
charachter set :utf-8 unicode
collation: utf8_percian_ci

لطفا بگید که چارست رو باید توی تگ متا قرار بدم یا اینکه موقع تماس با پایگاه داده باید از این کوئری استفاده کنم؟

funpatogh
پنج شنبه 20 آبان 1389, 22:06 عصر
فیلد های با نوع varchar و یا text باید charachter set :utf-8 unicode
باشند
اینجا رو هم ببینید بدک نیست
http://phpbuilder.com/manual/en/function.mysqli-set-charset.php

idocsidocs
جمعه 21 آبان 1389, 00:32 صبح
فیلد های با نوع varchar و یا text باید charachter set :utf-8 unicode
باشند
اینجا رو هم ببینید بدک نیست
http://phpbuilder.com/manual/en/function.mysqli-set-charset.php

در مورد مطلب اول باید بگم که من از XAMPP استفاده می کنم و هنگام استفاده از phpmyadmin فقط امکان تعیین کلکشن جداول و ستونها وجود داره و نمی شه چارست رو تعیین کرد.

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

هنوز نتیجه ای نگرفتم. چیز دیگه ای به ذهنتون نمی رسه؟