7 Blogger

สวัสดีเราเอง 7 ไง (จำไม่ได้เหรอ !?!?!)

February 21, 2009

[PHP] Save file ภาษาไทยได้แล้ว เย้

Written by
7

โอย กว่าจะงมได้ function ง่ายๆอย่าง mkdir(); หรือ copy(); เวลา save file ออกมาแล้ว ถ้าเป็นชื่อภาษาไทย มันจะออกมายึกยือ(#$%^&) น่ากวนโอ๊ยที่สุด ไม่รู้ว่าจะอยากรู้กันหรือเปล่านะ แต่อารามดีใจ งมมาตั้ง 3 ชั่วโมงแน่ะ

บอกไว้ก่อน อันนี้ผมใช้ทำ Web App รันที่ localhost บน Windows เลยอยากให้ save ชื่อไทยได้ ไม่อย่างนั้นมันจะไม่สะดวกเวลาใช้งาน ตามปกติบนเวปทั่วไปจะใช้ UTF-8 กัน(หน้าตาประมาณนี้ %E0%B8%A7%E0%B8%B1%E0%)

เริ่มที่ funcion ตัวปัญหาก่อน

mkdir(pathname) *ใช้สร้าง folder
copy(source,dest) *ใช้ copy file จากตรงโน้น ไป ตรงนั้น

function ทั้ง 2 ตัวนี้จะบันทึก file และ folder ตามชื่อที่ใส่ลงไป แต่อนิจจามันใช้ชื่อไทยมิได้ เพราะว่า encoding charset ของหน้า webpage ผมตั้งไว้ที่ UTF-8 เวลารับค่ามาจาก form แล้วมันจะเป็น UTF-8(เผอิญผมใช้ JQuery ทำงานในหน้านั้นเลย ไม่ได้ส่งไปรัน code ที่ file อื่น *ไม่รู้เกี่ยวหรือเปล่า ไม่ได้ลอง เพราะ folder ที่สร้างออกมามันเป็น UTF-8)

ที่นี้มาดู function ที่แก้ปัญหานี้กัน

iconv(in_charset,out_charset,str) *ใช้แปลง charset ไงหล่ะ

ตัวอย่าง
$filename = iconv(’UTF-8′,’windows-874′,$filename);
$dir = iconv(”UTF-8″,’windows-874′,$dir);

กรณีนี้ผมไม่ต้องการเปลี่ยนแปลง charset ทั้งหน้า อยากให้เป็น UTF-8 เหมือนเดิม แต่แปลงเฉพาะ ชื่อ folder หรือ filename ที่ต้องการเท่านั้น

จากตัวอย่างข้างบน ผมแปลงจาก UTF-8 เป็น windows-874 ถึงจะสามารถ save file เป็นภาษาไทยได้ถูกต้องครับ(กว่าจะรู้ใช้เวลาตั้ง 3 ชั่วโมง โง่เนอะ *มันกวนโมโหด้วยหล่ะ กรูกำลังจะผ่าน Module นี้แล้วนะเฟ้ย รู้สึกเหมือนติดแหงก)

ปล. iconv functions เป็น extention นะ วิธีติดตั้งถาม อากู๋ ดูเอาเอง เข้าใจ๋ 

เรื่องที่เกี่ยวข้อง

  • การ Backup ข้อมูล Email จาก Outlook
  • อย่าลืม Backup กันนะ
  • มาทำ Joystick ให้เป็น Keyboard เล่นกัน
  • เพิ่งรู้ Copy รูปภาพลง Clipboard จาก Browser ได้ด้วย
  • สลัดไฟล์ให้ไร้เจ้าของด้วย Unlocker
  • 6 comments for this post.

    1. Comment from ໘ on February 22nd, 2009 :

      เคยพยายามใช้ iconv แก้ encoding ของไฟล์ .sql แก้ยังไงมันก็ไม่ยอมเปลี่ยน สุดท้ายโหลดมาแก้ผ่าน Notepad++ แทน -*-

    2. Comment from เอ็กซ์ on March 5th, 2009 :

      ตอนนี้ผมก็มีปัญหาตรง function copy(); เหมือนกันครับ คือผมทำเป็น function upload รูปภาพครับ แล้ว copy รูปไปยัง folder ที่เรากำหนด เก็บเฉพาะชื่อลง database แต่ถ้ารูปที่จะ copy เป็นภาษาไทยชื่อภาพที่ folder ปลายทางจะเป็นภาษาต่างดาวเลยครับ ผมลองแก้โดยการเอาแท๊ก “” ไปแปะไว้ส่วนบนก็ไม่หายครับ ไม่ทราบว่าใช่กรณีเดียวกันหรือเปล่าครับ…ขอบคุณครับที่ให้ความรู้ใหม่ๆ

    3. Comment from x on March 5th, 2009 :

      ขอบคุณมากครับ เพิ่มจะได้รู้จักกับ function iconv ครั้งแรกเลยครับ แต่ดูแล้วยังคิดไม่ออกเหมือนกันว่ามันจะเอาไปใช้อย่างอื่นได้อีกหรือเปล่า แต่ยังไงก็ขอบคุณครับ

    4. Comment from 7 on March 6th, 2009 :

      บน Host ไม่รู้จะใช้ชื่อไทยได้หรือเปล่าไง มันเลยน่าจะ save เป็น UTF-8 ให้แต่ที่ใช้เพราะระบบผมเป็น WebApp รันบนเครื่องเราเอง ใช้งานเป็น Application เวลาจัดการ file ต่างๆ เลยอยากให้เป็นภาษาไทยได้ด้วย ไม่งั้นยุ่งยาก user ตาย

      ความจริง windows-874 นี่ก็แทบจะลืมไปแล้วเหมือนกัน คือเข้าใจปัญหา แต่ว่าไม่รู้ว่าไอ้ตัว Windows มันต้องใช้ encode อะไรในระบบ แล้วไอ้ windows-874 นี่ก็เป็น charset ไทยเก่าแก่สมัยทำเวปรุ่นแรกๆ สมัยนี้ charset ไทยรุ่นเก่าที่รู้จักกันก็ TIS-620 ส่วนเวปไทยรุ่นใหม่เดี๋ยวนี้ก็ใช้ UTF-8 กันหมดแล้ว

    5. Comment from ดูหนังออนไลน์ on April 17th, 2009 :

      ผมแปลงจาก UTF-8 เป็น windows-874 ถึงจะสามารถ save file เป็นภาษาไทยได้ถูกต้องครับ

      เอ่อ.. วิธีการอยู่ตรงนี้เอง

    6. Comment from naybanan on July 28th, 2009 :

      ขอบคุณมากครับ ถ้าอัพขึ้นโฮสจริง จะมีปัญหาอะไรหรือเปล่าครับ

    Leave a Comment