PDA

View Full Version : سوال: مشکل با فونت فارسی در آپلود فایل اکسل



iner30
دوشنبه 04 دی 1391, 13:15 عصر
سلام خدمت دوستان
در قسمتی از سایتم باید از کاربر فایل اکسل دریافت کنم و داخل دیتابیس ذخیره کنم
ولی از اونجایی که php فایل اکسل رو دریافت نمیکنه باید save as > csv بگیریم
دوتا مشکل هست:
اولا وقتی save as میگیریم فونتها به میریزه و چند تا حرف جاش علامت سوال میاد
دوما وقتی اون فایل رو آپلود میکنم اصلا متن هارو قبول نمیکنه ، اگه انگلیسی باشه مشلی ندارم ولی وقتی فارسی باشه ذخیره نمیشه ، انگار فیلد خالی باشه

به نظرتون چیکار کنم
غیر از گرفتن فایل کار دیگه ای نمیتونم بکنم ، چون حجم اطلاعات زیاده ...

Unique
دوشنبه 04 دی 1391, 14:06 عصر
متاسفانه خوب بیان نکردین مشکل چیه !


ولی از اونجایی که php فایل اکسل رو دریافت نمیکنه
یعنی چی دریافت نمیکنه ! یعنی نمیتونید از طریق فرم با input فایل را با php بگیرید و ذخیره کنید روی سرور ؟ (مشکلتون اینه)


باید save as > csv بگیریم
save as چه ربطی به Upload داره !؟ منظورتون اینه که فایل های excel که کاربراتون توی سایت با کد شما ارسال کردند را میخواین دریافت کنین ؟!

بین صحبت های شما تناقض وجود داره ! اما برای اینکه مقادیر فارسی را توی فایل excel ذخیره کنید باید اون ها را به صورت unicode ذخیره کنید واگه هم میخوان ونیدوز اونها را درست توی excel نمایش بده باید BOM مناسب هم بگذارین ! من متوجه نمیشم حالا مشکل شما چیه!؟

iner30
دوشنبه 04 دی 1391, 14:14 عصر
همونطور که گفتم میخوام بعد آپلود فایل ، اطلاعات داخل فایل اکسل خوانده بشه و داخل دیتابیس ذخیره بشه
مشکل آپلود فایل اکسل نیست ، مشکل خوندن اون و ذخیره کردنشه ... منظورم ازاینکه php فایل اکسل نمیگیره ، این بود که اونو نمیتونه بخونه ... :چشمک:

Unique
دوشنبه 04 دی 1391, 18:57 عصر
دوست عزیز ، php اتفاقا خیلی هم خوب میتونه فایل های Excel را بخونه ! البت در این مورد فکر کنم شما میخواین csv بخونین که اصلا excel نیست و یک فرمت خیلی معتبره !
برای فارسی معمولا از Utf-8 استفاده میشه و فایل ها هم با BOM هستند ، شما کافیه اینطوری عمل کنی :


$previous_encoding = mb_internal_encoding();
mb_internal_encoding('UTF-8');
//Process csv file and use explode on comma or tab and place into database
mb_internal_encoding($previous_encoding);

اینطوری php خودش BOM را اتوماتیک تشخیص میده و مشکلی پیش نمیاد.

راه حل های دیگه ای هم وجود داره ، مثلا میتونی از تابع fgetcsv استفاده کنین ، فقط حواستون باشه locale را بگذاری روی utf-8 وگرنه این تابع Multibyte را پشتیبانی نمیکنه :

setlocale(LC_ALL, "en_US.UTF-8");

یک کلاسی هم هست به نام parseCSV (http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CDEQFjAA&url=http%3A%2F%2Fcode.google.com%2Fp%2Fparsecsv-for-php%2F&ei=Bn7YUKThNMeztAaWiYDIAQ&usg=AFQjCNFOIdl-dR7nxRG5XAx-camsjwUmGg&sig2=922dUg5wYUeG7cgiDMVyjw&bvm=bv.1355534169,d.Yms) که میتونید از اون استفاده کنین.

در کل میخوام بگم تا یک بهش ور نرین به جایی نمیرسین.

iner30
دوشنبه 04 دی 1391, 21:02 عصر
خب اگه میشه اکسل رو خوند ، تابع اون رو مثال بزنید ، من هرچی تو انجمن دیدم csv بود به خاطر همین مجبور بودم save as بگیرم از فایل اکسلم

Unique
سه شنبه 05 دی 1391, 02:15 صبح
برای CSV که خیلی مثال زدم ! برای Excel هم از PHPExcel (phpexcel.codeplex.com) استفاده کنید ، واقعا کلاس خیلی خوبی هستش !
کلاس البته زیاده ، با simple-xlsx هم کار کردم و خوبه ، از اینجا (http://www.phpclasses.org/package/6279-PHP-Parse-and-retrieve-data-from-Excel-XLS-files.html) بگیرین.

iner30
سه شنبه 05 دی 1391, 11:04 صبح
خیلی خیلی ممنون
تو نت دیده بودم ، ولی دانلود نکرده بودم
شما باعث شدی به مقصود برسم

لطف کردی