ปัญหาตัว ภ กลายเป็นสี่เหลี่ยม
ปัญหานี้ มีสาเหตุและการแก้ไข ที่ผมเคยพบอยู่ 3 กรณี
1. ปัญหาจากการใช้ preg_replace บางครั้งเราอาจต้องใช้ฟังก์ชั่นนี้ในโค้ด โดยพื้นฐานแล้ว ฟังก์ชั่นนี้มันทำงานกับ Ansi ครับ แต่เราก็สามารถบังคับให้มันทำงานในโหมด UTF-8 ได้ด้วยการเพิ่ม flag u ครับ (u ตัวเล็ก) เช่น
preg_replace( '/....../usi' );
ปัญหานี้เกิดกับฟังก์ชั่นในกลุ่มนี้ ทุกตัวนะครับ
2. ปัญหาจากตัว Server เอง อันนี้ผมได้รับรายงานมาจาก Webmaster ท่านอื่นครับ เนื่องจากผมมักจะเขียนโค้ดเป็น UTF-8 ตอนทดสอบกับ Server ของผมมันก็ปกติดี แต่พอย้าย Server มันก็เลยเพี้ยน ปัญหานี้เขาแจ้งมาว่าเขาแก้ที่ Server อันเนื่องมาจาก phpMyAdmin มันเรียก Service ซ้อนกันครับ (เขาแจ้งมานะ)
3. ปัญหาของฐานข้อมูลเอง สาเหตุ เกิดจากตัว Server ไม่ได้รองรับรหัสอักขระ UTF-8 แบบสมบูรณ์ ทำให้มีปัญหากับภาษาไทย การแก้ไขอาจต้องทำหลายอย่าง
- การตั้งค่า Server ในกรณ๊ของ Windows ให้กำหนด Region ให้เป็น Thai มันจะตั้งค่าทุกอย่างให้ถูกต้องได้อัตโนมัติ จุดนี้เจอกับพวกที่จำลอง Server ด้วย Appserv หรือ XAMPP บ่อยๆ ส่วน Linux ยังไม่เคยเจอ
- การตั้งค่า PHP ให้รองรับ UTF-8 สามารถทำได้ที่ php.ini มองหา default_charset กำหนดค่าให้เป็น utf-8 และถ้ามี ; ด้านหน้าให้เอาออกด้วย
เสร็จแล้ว restart Apache อีกทีdefault_charset = "utf-8" - ในกรณีที่ไม่สามารถทำตามสองข้อด้านบนได้ ผมเคยใช้วิธีนี้ ผมใช้วิธีสร้างฐานข้อมูลเป็น Latin1 และสร้างฟิลด์แบบ TIS-620 แทนครับ ซึ่งมันก็ใช้ได้ผลเหมือนกัน
ข้อที่ 1 เป็นปัญหาอันเกิดจากความผิดพลาดของการเขียนโค้ด ครับ การแก้ไขก็แก้ไขที่โค้ดของเรา ส่วนปัญหาข้อ 2 และ 3 เป็นปัญหาที่มาจากการตั้งค่า Server