วันอังคารที่ 11 กุมภาพันธ์ พ.ศ. 2557

ภาษาต่างดาว php UTF-8 TIS-620

สำหรับผู้ที่ทำเว็บ เคยหรือไม่ที่หน้าเว็บออกมาเป็นแบบข้างล่างนี้

ปัญหาก็คือ เรื่องของ Encoding หรือ charset นั่นเอง
มีอยู่ 2 จุด คือ ในส่วนหัวของ HTML กำหนด charset ไม่ตรงกับเครื่องมือที่ใช้เขียน HTML

เช่น ใน EditPlus ตรวจสอบ Encoding ได้ที่ Document > File Encoding > Change File Encoding

จะมีตัวเลือกให้เปลี่ยน เป็น UTF-8 หรือ ถ้ากำหนด charset ในส่วนหัวของ HTML เป็น tis-620 ต้องกำหนดให้เป็น ANSI
ถ้ากำหนดเป็น UTF-8 แต่ส่วนหัวของ HTML กำหนด charset เป็น tis-620 ก็จะเห็นเป็นตัว ภาษาต่างดาว เหมือนในตัวอย่างข้างบน ซึ่งกำหนด charset ในส่วนหัว HTML เป็น UTF-8  แต่ที่ EditPlus กำหนด Encoding เป็น ANSI

เมื่อแก้ไขให้ตรงกัน โดยกำหนด Encoding เป็น tis-620 ปัญหาต่าง ๆ ก็จะหายไป เว็บก็จะอ่านได้ การค้นหาข้อมูลในฐานข้อมูลก็จะทำได้ตามปกติ


ปัญหาไม่ได้อยู่แค่นั้น

สมมติว่า เว็บอ่านออก แต่ถ้ามีการต้องไปค้นหาข้อมูลในฐานข้อมูล และถ้า Encoding ไม่ตรงกัน ระหว่างหน้าเว็บ HTML หรือ PHP กับ Encoding ของ ฐานข้อมูลบน Server เช่น MySQL การค้นหาก็จะล้มเหลว หาไม่พบ

การแก้ไขง่าย ๆ ก็คือ แปลงข้อความที่จะใช้ค้นข้อมูล จาก Encoding ของหน้าเว็บ ให้เป็น Encoding ที่ใช้ในฐานข้อมูล เช่น ถ้าหน้าเว็บเป็น tis-620 แต่ในฐานข้อมูลใช้ utf-8 เราก็แปลง tis-620 ให้เป็น utf-8 เสียโดยใช้ฟังก์ชัน iconv() เช่น

$find = iconv('TIS-620','UTF-8//ignore',$find);

ตัวอย่างนี้ เปลี่ยน Encoding จาก tis-620 เป็น UTF-8 เฉพาะค่าในตัวแปร $find เท่านั้น เพื่อให้สามารถไปค้นหาข้อมูลใน Sever ที่ใช้ฐานข้อมูล MySQL ที่กำหนด Encoding เป็น UTF-8 ได้

มิฉะนั้น จะค้นหาข้อมูลไม่พบ

ถ้าต้องการเปลี่ยนกลับ จาก UTF-8 เป็น tis-620 เพื่อให้แสดงข้อความบนหน้าเว็บได้ ก็ต้องแปลงกลับทำนองเดียวกัน คือ

$found = iconv('UTF-8','TIS-620//ignore',$found);

ในตัวอย่างข้างบน สมมติว่า อ่านข้อมูลในฐานข้อมูลที่มี Encoding เป็น utf-8 และต้องการให้นำมาแสดง บนหน้าเว็บที่กำหนด charset เป็น tis-620 ก็จะสามารถแสดงได้ โดยไม่เป็น ภาษาต่างดาว

อ้างอิง
http://th1.php.net/manual/en/function.iconv.php








ไม่มีความคิดเห็น:

แสดงความคิดเห็น