PDA

View Full Version : طریقه Insert کردن UTF8 و ANSI در دیتابیس



phpdriver
جمعه 03 آذر 1391, 13:00 عصر
سلام.

تو فایل zip که آپلود کردم با PHP به فایل اکسس وصل میشم و داخلش Insert میکنم.

مشکل:

اگه فایل attach شده رو نگاه کنید من هم فایل رو UTF8 و هم ANSI ذخیره کردم.

وقتی در فایل ANSI متغیر s1 و s2 رو به ACCESS ارسال میکنم در اکسس s1 به درستی فارسی نمایش داده میشه ولی S2 درست نمایش داده نمیشه.

وقتی در فایل UTF8 متغیر s1 و s2 رو به ACCESS ارسال میکنم s1 و S2 هیچکدوم درست نمایش داده نمیشه.


چرا چنین چیزی رو مطرح کردم:

من دیتابیس MySQL دارم که کلی رکورد به شیوه متغیر S2 در فایل UTF8 داره و با این نوع ذخیره داده در دیتابیس MySQL مشکلی ندارم چون در سایت بدرستی فارسی نمایش داده میشه محتویات این دیتابیس.

حالا وقتی میخوام برخی محتویات این رکوردها در MySQL رو به Access به شیوه کدی که براتون atach کردم ارسال کنم مشکل بالا پیش میاد. یعنی تو دیتابیس ACCESS مشکل درست نمایش ندادن فارسی رو دارم.

متاسفانه کسی که دیتابیس MySQL رو در اختیارم قرار داده دیتا هاش رو بدون رعایت ارسال بصورت UTF8 در دیتابیس INSERT کرده!


از اینکه راهنمایی میکنید ممنونم

phpdriver
شنبه 04 آذر 1391, 14:20 عصر
لطفا یکی جواب بده :ناراحت:

tux-world
یک شنبه 05 آذر 1391, 00:17 صبح
از این تابع که امیر حسین نوشتن استفاده کنید: برای تبدیل کاراکترهای وسترن به utf8:


<?php
/**
* western_to_persian : Converts Western ISO characters to Persian
*
*
* Author : AHHP(Amir Hossein Hodjaty Pour) ~ Boplo@Boplo.ir
* License : GPL
* Version : 1
* Created on : 1388/10/17 11:11pm
*
* @param string $str Input str to convert.
* @return string Converted string.
*/

function western_to_persian($str) {
$alphabet = array (
'Û°' => '۰', 'Û±' => '۱', 'Û²' => '۲', 'Û³' => '۳', 'Û´' => '۴', 'Ûµ' => '۵', 'Û¶' => '۶', 'Û·' => '۷', 'Û¸' => '۸',
'Û¹' => '۹', 'Ø¢' => 'آ', 'ا' => 'ا', 'Ø£' => 'أ', 'Ø¥' => 'إ', 'ؤ' => 'ؤ', 'ئ' => 'ئ', 'Ø¡' => 'ء', 'ب' => 'ب',
'Ù¾' => 'پ', 'ت' => 'ت', 'Ø«' => 'ث', 'ج' => 'ج', 'Ú†' => 'چ', 'Ø­' => 'ح', 'Ø®' => 'خ', 'د' => 'د', 'Ø°' => 'ذ',
'ر' => 'ر', 'ز' => 'ز', 'Ú˜' => 'ژ', 'س' => 'س', 'Ø´' => 'ش', 'ص' => 'ص', 'ض' => 'ض', 'Ø·' => 'ط', 'ظ' => 'ظ',
'ع' => 'ع', 'غ' => 'غ', 'ف' => 'ف', 'Ù‚' => 'ق', 'Ú©' => 'ک', 'Ú¯' => 'گ', 'Ù„' => 'ل', 'Ù…' => 'م', 'Ù†' => 'ن',
'Ùˆ' => 'و', 'Ù‡' => 'ه', 'ÛŒ' => 'ی', 'ÙŠ' => 'ي', 'Û€' => 'ۀ', 'Ø©' => 'ة', 'ÙŽ' => 'َ', 'ُ' => 'ُ', 'ِ' => 'ِ',
'Ù‘' => 'ّ', 'Ù‹' => 'ً', 'ÙŒ' => 'ٌ', 'ٍ' => 'ٍ', 'ØŒ' => '،', 'Ø›' => '؛', ',' => ',', 'ØŸ' => '؟'
);

foreach($alphabet as $western => $fa)
$str = str_replace($western, $fa, $str);

return $str;
}
?>

phpdriver
یک شنبه 05 آذر 1391, 04:09 صبح
مرسی ولی مشکل رو به شکل زیر حل کردم:



iconv('UTF-8','windows-1256',...


الان یه مشکل هست فقط! ی بصورت ي نشون داده میشه. بعد از تبدیل با str_replace جای ي رو عوض کردم ولی موقع ورود به دیتابیس دوباره ی همون ي هستش!

tux-world
یک شنبه 05 آذر 1391, 09:28 صبح
آره این هم میشد راستش یادم بود بگم ولی یادم رفت D: چطوری دارید ریپلیس میکنید؟ بعدش مطمئن هستید که تبدیل شده؟ من هم مشکلی باهاش داشتم اومد کاراکتر یونیکد نشده اون دو تا رو در اوردم و بعد از replace درست جواب داد

phpdriver
یک شنبه 05 آذر 1391, 13:42 عصر
درست استفاده میکنم ولی کار نمیکنه!

دلیل کار نکردنش بخاطر اینه که متغیر به 1256 تبدیل شده وقتی میخوایم جای ي ها ی بزاریم قبول نمیکنه چون اصلا 1256 ی نداره!

replace هم که نمیشه تو کوئری های اکسس نوشت تا بالاخره تو خود دیتابیس اکسس replace کنم! :ناراحت: