encode for ajax

當使用ajax要傳送中文資料時,可使用以下function:

var unreserved = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_.~";
var reserved = "!*'();:@&=+$,/?%#[]";
var allowed = unreserved + reserved;
var hexchars = "0123456789ABCDEFabcdef";

function gethex(decimal) {
return "%" + hexchars.charAt(decimal >> 4) + hexchars.charAt(decimal & 0xF);
}

function encode(decoded) {
var encoded = "";
if (true) {
for (var i = 0; i < decoded.length; i++ ) {
var ch = decoded.charAt(i);
if (unreserved.indexOf(ch) != -1) {
encoded = encoded + ch;
} else {
var charcode = decoded.charCodeAt(i);
if (charcode < 128) {
encoded = encoded + gethex(charcode);
}
if (charcode > 127 && charcode < 2048) {
encoded = encoded + gethex((charcode >> 6) | 0xC0);
encoded = encoded + gethex((charcode & 0x3F) | 0x80);
}
if (charcode > 2047 && charcode < 65536) {
encoded = encoded + gethex((charcode >> 12) | 0xE0);
encoded = encoded + gethex(((charcode >> 6) & 0x3F) | 0x80);
encoded = encoded + gethex((charcode & 0x3F) | 0x80);
}
if (charcode > 65535) {
encoded = encoded + gethex((charcode >> 18) | 0xF0);
encoded = encoded + gethex(((charcode >> 12) & 0x3F) | 0x80);
encoded = encoded + gethex(((charcode >> 6) & 0x3F) | 0x80);
encoded = encoded + gethex((charcode & 0x3F) | 0x80);
}
}
}
return encoded;
}
}
//encoding:
encode(document.getElementById('keyword').value);

沒有留言: