ปัญหาตัว ภ กลายเป็นสี่เหลี่ยม

ปัญหานี้มักจะเกิดเมื่อ page ของเราเป็น UTF-8 ครับ ซึ่งปัญหานี้เกิดจากอะไรผมไม่แน่ใจนัก ผมเดาเอาว่า รหัส ของมันคงไปตรงกับอะไรซักอย่างก็เลยทำให้การแสดงผลไม่ถูกต้อง

ปัญหานี้ มีสาเหตุและการแก้ไข ที่ผมเคยพบอยู่ 3 กรณี

1. ปัญหาจากการใช้ preg_replace บางครั้งเราอาจต้องใช้ฟังก์ชั่นนี้ในโค้ด โดยพื้นฐานแล้ว ฟังก์ชั่นนี้มันทำงานกับ Ansi ครับ แต่เราก็สามารถบังคับให้มันทำงานในโหมด UTF-8 ได้ด้วยการเพิ่ม flag ครับ (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 และถ้ามี ; ด้านหน้าให้เอาออกด้วย
    default_charset = "utf-8"
    เสร็จแล้ว restart Apache อีกที
  • ในกรณีที่ไม่สามารถทำตามสองข้อด้านบนได้ ผมเคยใช้วิธีนี้ ผมใช้วิธีสร้างฐานข้อมูลเป็น Latin1 และสร้างฟิลด์แบบ TIS-620 แทนครับ ซึ่งมันก็ใช้ได้ผลเหมือนกัน

ข้อที่ 1 เป็นปัญหาอันเกิดจากความผิดพลาดของการเขียนโค้ด ครับ การแก้ไขก็แก้ไขที่โค้ดของเรา ส่วนปัญหาข้อ 2 และ 3 เป็นปัญหาที่มาจากการตั้งค่า Server

ผู้เขียน goragod โพสต์เมื่อ 12 พ.ย. 2551 เปิดดู 8,781 ป้ายกำกับ PHPUTF-8
^