มันเป็นปัญหาอีกแล้ว เมื่อโอนข้อมูลที่เป็นภาษาไทยที่เป็นรหัส windows-874 เข้ามาใน JSON มันก็จะทำให้ $.getJSON ของ Jquery ไม่สามารถประมวลผลได้ เพราะมันมีเครื่องหมายที่ทำให้ Script ของ Jquery มันสับสน ดังนั้นจึงต้องแปลง windows-874 ไปเป็นรหัส html encode คือ %hex php ดังนี้
$hencode = '';
$v = 0;
while ($v <strlen($thaitext))
{
$hencode = $hencode . '%' . dechex(ord(substr($thaitext,$v,1)));
$v++;
}
หลังจากนั้นใช้ $get.JSON โหลด JSON file ที่ PHP สร้างมาตามระบบไฟล์ JSON ตามปกติแล้วส่งข้อมูล hencode เข้าไปใน function ของ Javascript ดังนี้
function w874_utf8(hex)
{
var text1 = '';
var cc = 0;
var char1 = '';
var i = 0;
while (i<hex.length)
{
char1 = hex[i+1];
char1 += hex[i+2];
i += 3;
cc = parseInt(char1,16);
if (cc == 223) {
cc = 191;
text1 += '%E0%B8%' + cc.toString(16).toUpperCase();
} else
if (cc > 223) {
cc -= 96;
text1 += '%E0%B9%' + cc.toString(16).toUpperCase();
} else
if (cc > 127) {
cc -= 32;
text1 += '%E0%B8%' + cc.toString(16).toUpperCase();
} else {
text1 += '%' + cc.toString(16).toUpperCase();
}
}
return decodeURI(text1);
}
อย่างไรก็ตามการดึง JSON ที่ส่งมาจาก php ต้นทางมาโดยใช้ encodeURI ของ javascript ปลายทาง จะทำให้ไม่สามารถแปลงโค๊ดบางตัวได้ คือ โค๊ดที่อยู่ระหว่าง %23 ถึง %3f (ยกเว้นตัว ปีกกา < และ >) จำเป็นจะต้องมีการสร้าง function พิเศษมาเพื่อการแปลงโค๊ดดังกล่าว
ไม่มีความคิดเห็น:
แสดงความคิดเห็น