PDA

View Full Version : مشکل در ارسال اطلاعات فارسی به دیتابیس mysql



versaPHP
شنبه 09 اردیبهشت 1391, 14:25 عصر
با سلام ;

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

مشکل در ازسال اطلاعات فارسی به دیتابیس هست ، بدین صورت که وقتی کسی ثبت نام میکند در صورتی که نام را فارسی بزند اطلاعات تغییر کد میدهند و در دیتابیس قرار میگیرند ، مثلا نام : احسان -> Ù تبدیل میشه ، اما اگه در خود دیتابیس نام را دوباره به احسان تغییر بدم در سایت درست نمایش داده میشه ، مطمئنم هستم که مشکل از انکودینگ نیست ، فایل فانکشن اصلی انکودش ANSI (with out BOM) هست و همچنین بقیه ی فایل ها .... ، ضمنا دیتابیس هم ـutf-8 ـه و فیلد ها نیز همینطور ....
از دستورات مختلف مانند : SET NAMES 'utf-8' (اگه اشتباه نکنم!) و امثالهم هم استفاده کردم ، ولی لا فائده !

من خودم احساس میکنم مشکل از فانکشن زیر باشه که همه ی رشته ها رو عوض میکنه ، اما با فارسی کار نمی کنه :



// more advanced cleaning mysql function.
function mysqlScapeStr($str)
{
if(!get_magic_quotes_gpc())
{
$str = strip_tags($str);
$str = htmlentities($str);
return mysql_real_escape_string($str);
}
$str = stripslashes($str);
$str = strip_tags($str);
$str = htmlentities($str);
return mysql_real_escape_string($str);
}

مثلا متغیر $username


$username = mysqlScapeStr($username);


این هم فانکشن ارسال:


// insert values in the database $data must be an array
function inserData($data)
{


global $dataBaseTable;
$true = false;
if(is_array($data))
{


$values = array_map('mysqlScapeStr', array_values($data));
$keys = array_map('mysqlScapeStr',array_keys($data));



# Set character_set_client and character_set_connection


$query = mysql_query('INSERT INTO `'.$dataBaseTable.'` (`'.implode('`,`', $keys).'`) VALUES (\''.implode('\',\'', $values).'\')');
if($query !== false && mysql_affected_rows())$true = true;
}
return $true;
}




فایل فانکشنز رو هم + فایل رجیستر رو ضمیمه می کنم که احتمالا مشکل از همون فانکشنز هست .

پیشاپیش هم از دوستانی که کمک می کنند تشکر میکنم :قلب:

khanlo.javid
شنبه 09 اردیبهشت 1391, 15:54 عصر
دوست عزیز تنها موقع فرستادن اطلاعات با انکد utf8 کفاف نمیده باید سمت سرور پایگاه دادت رو هم که میسازی برای قسمت هایی که میدونی قراره اطلاعات فارسی داخلش ذخیره بشه باید روی utf8-persian ci تنظیم کنی وگرنه اطلاعاتت به همون صورتی که فرمودید ذخیره میشه.




موفق باشید.

versaPHP
شنبه 09 اردیبهشت 1391, 16:11 عصر
دوست عزیز تنها موقع فرستادن اطلاعات با انکد utf8 کفاف نمیده باید سمت سرور پایگاه دادت رو هم که میسازی برای قسمت هایی که میدونی قراره اطلاعات فارسی داخلش ذخیره بشه باید روی utf8-persian ci تنظیم کنی وگرنه اطلاعاتت به همون صورتی که فرمودید ذخیره میشه.




موفق باشید.

ممنون از توجهتون ،


این تصویر رو بنگرید :

http://www.jokfa.ir/image/uploads/1335667563---jokfa.ir---.jpg

و


http://www.jokfa.ir/image/uploads/1335638020---jokfa.ir---.jpg

خود دیتابیس هم utf-8 هست


از چی میتونه باشه بنظرتون ؟ از دوستانی که با این مشکل برخورد کردند تقاضا دارم راهنمایی کنند

plague
شنبه 09 اردیبهشت 1391, 16:23 عصر
htmlentities رو اینجوری استفاده کن


$value = htmlentities( $value, ENT_QUOTES, 'utf-8' );

MMSHFE
شنبه 09 اردیبهشت 1391, 16:35 عصر
از این تابع استفاده کنید:


// more advanced cleaning mysql function.
function mysqlScapeStr($str) {
if(get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
$str = strip_tags($str);
$str = htmlentities($str, ENT_QUOTES, 'utf-8');
mysql_set_charset('utf-8');
return mysql_real_escape_string($str);
}

موفق باشید.

versaPHP
شنبه 09 اردیبهشت 1391, 17:59 عصر
htmlentities رو اینجوری استفاده کن


$value = htmlentities( $value, ENT_QUOTES, 'utf-8' );



از این تابع استفاده کنید:


// more advanced cleaning mysql function.
function mysqlScapeStr($str) {
if(get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
$str = strip_tags($str);
$str = htmlentities($str, ENT_QUOTES, 'utf-8');
mysql_set_charset('utf-8');
return mysql_real_escape_string($str);
}

موفق باشید.




اوکی شد ...
شکرا جزیلا :قلب: