PDA

View Full Version : حرفه ای: تبدیل CSV به Array بصورت UTF-8



Tarragon
سه شنبه 02 آبان 1391, 15:27 عصر
سلام به استادان گرامی
من یه کد می خوام که یه فایل CVS رو به ارایه تبدیل کنه و از زبان فارسی هم پشتیبانی کنه
این یه نمونه کد نسبتا خوب که اگر از فارسی بتونه پشتیبانی کنه عالی می شه


<!DOCTYPE HTML>
<HTML dir="rtl">
<head>
<title>test csv to PHP array</title>
<meta charset="utf-8">
</head>
<body><table>
<?PHP
header('Content-Type: text/html; charset=utf-8');
$row = 1;
$handle = fopen ("test.csv","r");
while ( ($data = fgetcsv ($handle, 1000, ",")) !== FALSE ) {
$num = count ($data);
print "\t<tr>\n";
$row++;
for ($c=0; $c < $num; $c++) {
$datac = explode(";", $data[$c]);
foreach ($datac as $key => $value)
{echo "\t\t<td>$value</td>\n";};
echo "\t</tr>\n";
}
}
fclose ($handle);
?>
</table>
</body>
</html>

djsaeedkhan
سه شنبه 02 آبان 1391, 18:15 عصر
سلام
منم همین مشکل رو دارم. یه برنامه تحت وب دارم که با پسوندCSV کار می کنه. آخرش مجبور شدم به کاربر بگم وقتی فایل رو ایمپیورت می کنی قبلا با نوت پد بازش کن و به UTF-8 تبدیلش کن بعد بده به برنامه. اگه پیدا کردی به مام خبر بده.
البته راهی هست که انکودینگشو پیدا کنی و همزمان تبدیل کنی. ولی من تست کردم نشد
http://www.google.com/#hl=en&output=search&sclient=psy-ab&q=php+change+encoding+to+utf-8&oq=php%2B++encoding+to+utf-8&gs_l=hp.1.2.0i30j0i7i30l3.11371.11371.2.15813.1.1. 0.0.0.0.706.706.6-1.1.0.les%3B..0.0...1c.1.V1q2VhHj39U&pbx=1&bav=on.2,or.r_gc.r_pw.r_qf.&fp=814bd4d4b7cce50b&bpcl=35466521&biw=1366&bih=645

Tarragon
سه شنبه 02 آبان 1391, 19:51 عصر
سلام
هر چي گشتم راهي پيدا نكردم
كسي راه حلي براي تبديل اكسل به CSV مي شناسه؟

MMSHFE
سه شنبه 02 آبان 1391, 21:59 عصر
سلام
منم همین مشکل رو دارم. یه برنامه تحت وب دارم که با پسوندCSV کار می کنه. آخرش مجبور شدم به کاربر بگم وقتی فایل رو ایمپیورت می کنی قبلا با نوت پد بازش کن و به UTF-8 تبدیلش کن بعد بده به برنامه. اگه پیدا کردی به مام خبر بده.
فایل ANSI خودتون رو باز کنید و هر مقداری که ازش خوندین، با iconv به فرمت یونیکد تبدیل کنید. کار سختی نیست.

MMSHFE
سه شنبه 02 آبان 1391, 22:00 عصر
سلام
هر چي گشتم راهي پيدا نكردم
كسي راه حلي براي تبديل اكسل به CSV مي شناسه؟
درمورد کلاس PHPExcel تحقیق کنید. میتونید با کمک این کلاس، فایل Excel رو خونده و خودتون بصورت دستی و به کمک حلقه، فایل CSV رو تولید کنید.

Tarragon
چهارشنبه 03 آبان 1391, 06:07 صبح
آقا واسه iconv این دستور رو پیدا کردم

iconv_set_encoding("internal_encoding", "UTF-8");
iconv_set_encoding("output_encoding", "ISO-8859-1");

اما نمی دونم کجا باید استفاده شه

parsagw
چهارشنبه 03 آبان 1391, 13:00 عصر
قبل از استفاده از ICONV!

Tarragon
چهارشنبه 03 آبان 1391, 13:12 عصر
بله؟ من نفهمیدم.

MMSHFE
چهارشنبه 03 آبان 1391, 19:16 عصر
دوست عزیز، شما میتونید محتوای خونده شده از یک فایل ANSI رو اینطوری تبدیل به یونیکد کنید:

$unicode = iconv('iso-8859-1', 'utf-8', $ansi);
و با جابجا کردن iso-8859-1 و utf-8 هم درصورت نیاز میتونید دوباره به حالت ANSI برگردین. البته اگه دیدین عمل تبدیل درسته انجام نمیشه (بخصوص برای عبارات فارسی)، بجای iso-8859-1 از windows-1256 (کدپیج Arabic) استفاده کنید.

Tarragon
چهارشنبه 03 آبان 1391, 22:24 عصر
ببخشید اما من نتونستم با کد ترکیبش کنم
می شه بگید کجا باید ازش استفاده کنم؟
قبل از fopen یا روی fopen??

Tarragon
پنج شنبه 04 آبان 1391, 18:45 عصر
up...............

MMSHFE
پنج شنبه 04 آبان 1391, 20:07 عصر
دوست عزیز، شما فایل رو باز میکنید، محتوا رو میخونید و بعد فایل رو میبندید. بعد محتوایی که خوندین رو به فرمت یونیکد تبدیل میکنید و نهایتاً توی کدتون ازش استفاده میکنید. مثال:


// $fp = fopen('ansi_file.csv');
// $contents = '';
// while(!feof($fp)) {
// $contents .= fgets($fp) . PHP_EOL;
// }
// fclose($fp);
$contents = file_get_contents('ansi_file.csv');
$unicode = iconv('windows-1256', 'utf-8', $unicode);

همونطور که توی مثال میبینید، هم با fopen و هم با file_get_contents میشه فایل رو بخونید. مهم بعد از خوندنه که با کمک iconv محتوا رو تبدیل به یونیکد میکنیم. در ادامه کد فوق، میتونید از متغیر unicode$ برای ذخیره محتوا توی دیتابیس با فرمت یونیکد یا هر کار دیگری استفاده کنید.
موفق باشید.