ฟันธงโหลดภาษาไทยใน XML ด้วย AS3 จาก ServerSide

หัวข้อนี้ไม่เขียนภาษาไทยคงจะแปลก เพราะเกี่ยวกับการดึงข้อมูลภาษาไทย จากไฟล์ XML หรือจากการส่งข้อมูลจาก Server แบบ XML Format เรื่องของเรื่องคือ พอดีได้มีโอกาสต้องทำงานดึงข้อมูลภาษาไทยมาแสดงบนหน้าเว็บ ซึ่งเนื้องานที่ทำอยู่ทุกที ไม่ค่อยได้ใช้ภาษาไทยเท่าไหร่ สรุปคือ เกิดปัญหาขึ้น แสดงได้บ้าง ไม่ได้บ้าง มี random character แปลกๆ ต่อท้ายข้อมูลที่โหลดมาบ้้าง ทำให้เกิด XML not well-formed ฟ้องขึ้นมา (ตัวอย่าง well formed xml) สุดท้ายไ้ด้ความช่วยเหลือจาก katopz และ joke และทำให้แก้ปัญหาไปได้ จึงอยากเอามาแบ่งปัน เผื่อว่าจะช่วยลดเวลาในการแก้ปัญหาของท่านอื่นๆ ได้ต่อไป ดังนี้

1. ฝั่ง flash โหลด XML ตามปกติ แต่ห้ามใช้ System.useCodePage = true; ถ้ามีให้ comment ทิ้งไป เนื่องจากเราจะใช้การ encode ข้อมูลแบบ UTF-8 ซึ่งจะกำหนดมากจาก xml ที่โหลดเข้ามา หากกำหนดให้ใช้ System.useCodePage จะเป็นการบังคับให้แฟลชใช้การ encode ข้อมูลตาม System default ของเครื่องผู้ใช้ ซึ่งเมื่อส่งข้อมูลมาแบบ UTF-8 แน่นอนว่าภาษาไทยมันจะแสดงไม่ได้อย่างแน่นอน และการเตรียมการฝั่ง Flash จะจบเพียงแค่นี้ (จริงๆ)

ส่วนวิธีการอ่านข้อมูล XML ลองอ่านกระทู้ของน้องก่อ ดูนะครับ เขียนไว้ละเอียดดีครับ
- ทำงานกับฐานข้อมูลแบบ Online ด้วย Flash และ PHP
- Flash+XML ตอนที่ 1

2. ถัดมาส่วนที่เป็นเทคนิคสำคัญในการที่จะทำให้ส่งข้อมูลภาษาไทยสำเร็จ คือ ฝั่ง XML นี่เอง ที่สำคัญอย่างยิ่ง ดังนี้

2.1 ข้อมูลที่ส่งมาทั้งหมด ต้อง encode เป็นแบบ UTF-8 (วิธีแปลงไฟล์เพื่อทดสอบง่ายๆ คือ ใช้ notepad เปิด xml ไฟล์ก่อน หลังจากนั้นเลือก Save As และเลือก Encoding เป็น UTF-8 ก็จะได้ไฟล์ไว้ทดสอบ – credit: katopz)

2.2 ข้อมูลภาษาไทยทั้งหมด ควรที่จะเก็บอยู่ภายใน tag value ของ xml ไม่ใช่ attribute และครอบข้อมูลภาษาไทยทั้งหมดด้วย <![CDATA[ภาษาไทย]]]> (credit: katopz และ joke) เช่น

<xml>
<title><![CDATA[กรุงเทพมหานคร]]></title>
<link>http://www.bangkok.com</link>
</xml>

2.3 ใส่ header ของ XML Data ที่ส่งกลับมาเป็น <?xml version=”1.0″ encoding=”utf-8″ ?>

2.4 หากยังไม่ได้ ให้ตรวจสอบอีกครั้งว่าข้อมูลที่ส่งมา encode เป็น UTF-8

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

2.6 หากยังไม่ได้ ทดสอบด้วยไฟล์ที่ได้มากจาก notepad และ encode ด้วย UTF-8

ถ้าทำตามข้างบนทั้งหมด ผมมั่นใจว่าน่าจะได้อย่างแน่นอนครับ และขอบคุณ katopz และ joke อีกครั้งสำหรับเทคนิคดีๆ ครับ