ภาษาต่างดาว 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
ปัญหาก็คือ เรื่องของ 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
ความคิดเห็น
แสดงความคิดเห็น