[PHP] Save file ภาษาไทยได้แล้ว เย้
In 7tip | 6 comments | permalink
โอย กว่าจะงมได้ 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 นะ วิธีติดตั้งถาม อากู๋ ดูเอาเอง เข้าใจ๋
เรื่องที่เกี่ยวข้อง
email this | tag this | digg this | trackback | comment RSS feed

เคยพยายามใช้ iconv แก้ encoding ของไฟล์ .sql แก้ยังไงมันก็ไม่ยอมเปลี่ยน สุดท้ายโหลดมาแก้ผ่าน Notepad++ แทน -*-
ตอนนี้ผมก็มีปัญหาตรง function copy(); เหมือนกันครับ คือผมทำเป็น function upload รูปภาพครับ แล้ว copy รูปไปยัง folder ที่เรากำหนด เก็บเฉพาะชื่อลง database แต่ถ้ารูปที่จะ copy เป็นภาษาไทยชื่อภาพที่ folder ปลายทางจะเป็นภาษาต่างดาวเลยครับ ผมลองแก้โดยการเอาแท๊ก “” ไปแปะไว้ส่วนบนก็ไม่หายครับ ไม่ทราบว่าใช่กรณีเดียวกันหรือเปล่าครับ…ขอบคุณครับที่ให้ความรู้ใหม่ๆ
ขอบคุณมากครับ เพิ่มจะได้รู้จักกับ function iconv ครั้งแรกเลยครับ แต่ดูแล้วยังคิดไม่ออกเหมือนกันว่ามันจะเอาไปใช้อย่างอื่นได้อีกหรือเปล่า แต่ยังไงก็ขอบคุณครับ
บน Host ไม่รู้จะใช้ชื่อไทยได้หรือเปล่าไง มันเลยน่าจะ save เป็น UTF-8 ให้แต่ที่ใช้เพราะระบบผมเป็น WebApp รันบนเครื่องเราเอง ใช้งานเป็น Application เวลาจัดการ file ต่างๆ เลยอยากให้เป็นภาษาไทยได้ด้วย ไม่งั้นยุ่งยาก user ตาย
ความจริง windows-874 นี่ก็แทบจะลืมไปแล้วเหมือนกัน คือเข้าใจปัญหา แต่ว่าไม่รู้ว่าไอ้ตัว Windows มันต้องใช้ encode อะไรในระบบ แล้วไอ้ windows-874 นี่ก็เป็น charset ไทยเก่าแก่สมัยทำเวปรุ่นแรกๆ สมัยนี้ charset ไทยรุ่นเก่าที่รู้จักกันก็ TIS-620 ส่วนเวปไทยรุ่นใหม่เดี๋ยวนี้ก็ใช้ UTF-8 กันหมดแล้ว
ผมแปลงจาก UTF-8 เป็น windows-874 ถึงจะสามารถ save file เป็นภาษาไทยได้ถูกต้องครับ
เอ่อ.. วิธีการอยู่ตรงนี้เอง
ขอบคุณมากครับ ถ้าอัพขึ้นโฮสจริง จะมีปัญหาอะไรหรือเปล่าครับ