Thursday, July 31, 2008

PHP และ MySQL กับการแสดงผลภาษาไทย

หลังจาก upgrade version ก็เกิดปัญหาการแสดงผลภาษาไทย
ตายละวา Database เราเจ๊งรึป่าวน้อ

ไม่นะ! ภาษาอังกฤษ ยังแสดงผลได้นี่นา
พอเปิดดู Database ก็โล่งอก เฮ้อ ยังอยู่ดีจริง ๆ ด้วย


แสดงว่าปัญหาน่าจะอยู่ที่การแสดงผล
ใช่จริง ๆ ด้วย Firefox มันแสดงผลเป็น UTF-8 นี่เอง

งั้นลองเปลี่ยนเป็น TIS-620 ซิ

โธ่เอ๊ย แค่นี้เอง จิ๊บ ๆ

แต่หลังจากนั้นก็มีโทรศัำพท์มาทั้งวัน
"น้อง web มีปัญหารึป่าวเนี่ย อ่านไม่ออกเลย"
"เปล่าครับพี่ แต่ต้องเปลี่ยน Encoding ครับ ทำแบบนี้ครับ ..."

โอ้ว บ่อยครั้งอย่างนี้สายัณห์รับไม่ได้ครับ หาวิธีแก้ดีกว่า google google นั่นไงล่ะ เจอเพียบ
บ้างก็บอกให้แก้ที่ MySQL ( http://gotoknow.org/blog/krunapon/69399 )

- เปิด my.ini ขึ้นมาโดยกดที่ Start -> run พิมพ์ my.ini แล้วกด Enter
ในส่วนของ [client] ให้เพิ่ม
default-character-set = tis620
ในส่วนของ [mysqld] หลัง database directory ให้เพิ่ม
default-character-set = tis620
character-set-server = tis620
collation-server = tis620_thai_ci
init_connect = 'SET collation_connection = tis620_thai_ci'
init_connect = 'SET NAMES tis620'
จากนั้น Restart MySQL

บ้างก็บอกให้แก้ที่ PHP

mysql_select_db($DatabaseName,$Conn) or die ("ไม่สามารถติดต่อกับฐานข้อมูลได้");

$cs1 = "SET character_set_results=tis620";
mysql_query($cs1) or die('Error query: ' . mysql_error());

$cs2 = "SET character_set_client = tis620";
mysql_query($cs2) or die('Error query: ' . mysql_error());

$cs3 = "SET character_set_connection = tis620";
mysql_query($cs3) or die('Error query: ' . mysql_error());



ทำไมของเราไม่ work หว่า

หลังจากลองอยู่พักใหญ่ ก็ต้องตัดใจ ใช้วิธีลูกทุ่ง ตรงไปตรงมา
header('Content-type: text/html; charset=tis620');

แต่มันต้องทำทุก file นี่สิ ใครมีวิธีดี ๆ ชัวร์ ๆ ช่วยบอกด้วยนะครับ