พอดีเมื่อวานนี้มีเพื่อนถามมาทาง MSN ว่าเว็บมีปัญหาใช้ภาษาไทยกับ AJAX ไม่ได้ คือส่งภาษาไทยไปแล้ว อ่านไม่ออกใน MySQL
ส่วนตัวนั้นมีประสบการณ์เกี่ยวกับปัญหาภาษาไทยมาบ้าง ถึงจะไม่มาก แต่ก็พอจะมั่นใจได้ว่า AJAX ไม่น่ามีปัญหากับภาษาไทย แต่มันไม่ใช่กับกรณีนี้
มาดูกันที่ส่วนประกอบต่างๆกันก่อน
Web Page (TIS-620) + AJAX (TIS-620) <–> PHP(TIS-620) <–> MySQL (TIS-620)
ดูๆจากข้างต้นก็ไม่น่าจะมีปัญหาอะไร
อย่างแรกผมเอา FireBug จับ XHR ดูก่อนเลย เป็น HTTP Post และพบว่าอ่านไทยไม่ออกครับ ผมแปลกใจมากๆ ทั้งๆที่ Header บอกว่า charset เป็น TIS-620
ลองถาม Google ดูจึงพบว่า AJAX มีปัญหากับ TIS-620 จริงๆด้วย เพราะมันส่งเป็น UTF-8 (จริงๆมีวิธีเปลี่ยนแต่ค่อนข้างยุ่งยาก)
ดังนั้นภาพข้างบนจึงผิด จริงๆต้องเป็นแบบนี้
Web Page (TIS-620) + AJAX (UTF-8) <–> PHP(UTF-8) <–> MySQL (TIS-620)
และสิ่งที่เราต้องแก้ก็คือแปลง UTF-8 ให้เป็น TIS-620 ที่ Server Side Script ซึ่งในที่นี้คือ PHP โดยการเพิ่ม code นี้เพื่อแปลงข้อความก่อน save ลง MySQL
$msg= iconv(‘UTF-8′, ‘TIS-620′, $msg);
สรุป
- ปัญหานี้จะเกิดต่อเมื่อใช้ Post Method เพราะส่วน Body จะถูก Encode เป็น UTF-8 ส่วน Get ไม่มีปัญหาเพราะข้อความต่อท้ายไปกับ URL แทน
- ถ้าไม่มีความจำเป็นต้องใช้ TIS-620 จริงๆ ผมขอแนะนำเหมือนทุกครั้ง คือใช้ UTF-8 จะดีกว่า ใช้ได้กับหลายภาษา ไม่ใช่แค่ภาษาไทย และ open source script ส่วนใหญ่เขียนมา support UTF-8 อยู่แล้ว
Related posts:
- AJAX + JSON ด้วย script.aculo.us (Prototype) และ JSON-Lib
- AJAX Comparison Matrix
- AJAX อ่านว่าอะไร
- การแก้ไขปัญหาภาษาไทยใน Spring Framework
- Java กับ Vista
Tags: AJAX, JavaScript, PHP

