Analytics

วันจันทร์ที่ 29 เมษายน พ.ศ. 2556

วิีธีโอนข้อมูลที่เป็นรหัส windows-874 เข้ามาในระบบ JSON

มันเป็นปัญหาอีกแล้ว เมื่อโอนข้อมูลที่เป็นภาษาไทยที่เป็นรหัส 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 พิเศษมาเพื่อการแปลงโค๊ดดังกล่าว


ไม่มีความคิดเห็น:

แสดงความคิดเห็น