JSONP发送数据时丢失字符

时间:2013-07-23 15:09:16

标签: php javascript character-encoding jsonp base64

我想创建一个脚本(javascript文件.jS),我可以在每个网站上放置我的域名。该脚本必须从网站读取文本并将其发送到服务器。服务器位于另一个域而不是从中读取文本的网站,这就是我使用JSONP的原因。阅读文本可以用不同的方式(不同的语言 - 来自世界各地的网站)进行查询,它们可能很长,这就是为什么在发送之前我用base64编码它们,将它们分成数据包并使用GET单独发送( JSONP)。

如果没有getJson()函数的定义,代码为:

var sBase64Code = base64_encode( document.getElementById('idText').innerHTML );
// we devide sBase64Code into data packets, 
// and changing it to array aBase64Code – I skip this algorythm
// and then I send packets to the server in loops
for(i in aBase64Code) {
   getJson(['idx='+i, 'code='+aBase64Code[i]], hFunCallback);
}

然而,在将代码发送到服务器之后,加入数据包并按base64_decode()解码数据后,结果发现与英语不同的字符丢失了。

mb_convert_encoding(base64_decode($b64), mb_detect_encoding(base64_decode($b64)))不起作用。

JavaScript base64_encode()函数是:

function base64_encode(data) {
    var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
    var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, enc = "", tmp_arr = [];
    if(!data) return data;

    do {
        o1 = data.charCodeAt(i++);
        o2 = data.charCodeAt(i++);
        o3 = data.charCodeAt(i++);

        bits = o1 << 16 | o2 << 8 | o3;

        h1 = bits >> 18 & 0x3f;
        h2 = bits >> 12 & 0x3f;
        h3 = bits >> 6 & 0x3f;
        h4 = bits & 0x3f;

        tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
    } while (i < data.length);

    enc = tmp_arr.join('');
    var r = data.length % 3;

    return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);
};

发送数据的示例: enter image description here

示例中的Base64:WndpbmkZdGEgbmkHIHRvIGtCGWJlay4=

0 个答案:

没有答案