วันพุธที่ 10 ตุลาคม พ.ศ. 2555

ปัญหา fgetcsv กับ ภาษาไทย

เขียนโปรแกรมให้เขาupload ไฟล์ .csv แล้วบันทึกลง MySQL  ทดสอบในเครื่องก็ได้ทุกอย่าง แต่พอเอาขึ้นเซิฟเวอร์ ปรากฏว่าฟิลด์ที่เป็นภาษาไทย ใช้ไม่ได้เลย  งัดมาสารพัดวิธี ทั้ง iconv ทั้งแปลงไฟล์ให้เป็น utf-8 ก็ยังไม่ได้ สุดท้ายได้คำตอบจากคุณ เล็กน้ำ http://www.leknarm.com/2010/03/fgetcsv-php.html  ซึ่งมีใจความว่า..

เนื่องจากได้เขียน php โดยอ่านไฟล์จากไฟล์ csv ซึ่งมีข้อความภาษาไทยอยู่ โดยเมื่อทดสอบบนเครื่องตัวเองนั้นไม่มีปัญหาใดๆ ทั้งสิ้นแต่เมื่อ deploy ขึ้นไปบน server ดันเกิดปัญหาขึ้นโดย ภาษาไทยนั้นไม่แสดงผล

จากที่ลอง research ดูก็ไล่ไปเรื่อยๆ ตั้งแต่ check ว่าเปิดไฟล์ได้ไหม echo ภาษาไทยได้ไหม และก็มาเจอประเด็นที่ fgetcsv

จากที่อ่านใน http://php.net/manual/en/function.fgetcsv.php ซึ่งมีเขียนไว้ว่า

Note: Locale setting is taken into account by this function. If LANG is e.g. en_US.UTF-8, files in one-byte encoding are read wrong by this function.

แสดงว่าเราต้องทำการ set locale ให้กับ apache การแสดงผลจึงจะถูกต้องโดยใช้คำสั่ง


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

แค่นี้ก้จะทำให้การ get csv ที่มีภาษาไทยภายในไฟล์แสดงผลได้ถูกต้องแล้วครับ

..

แต่มันก็ยังไม่หาย 100% คือเป็นภาษาไทยครับ แต่ทุกฟิลด์ที่เป็นภาษาไทย คำแรกจะหายไป เลยลองแก้จาก
setlocale ( LC_ALL, 'en_US.UTF-8' ); เป็น setlocale ( LC_ALL, 'Thai' );

ปรากฏว่าใช้ได้ครับ ..

1 ความคิดเห็น: