1

我想创建一个脚本(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)))不起作用。

JavaScriptbase64_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);
};

发送数据示例: 在此处输入图像描述

来自示例的 Base64:WndpbmkZdGEgbmkHIHRvIGtCGWJlay4=

4

0 回答 0