我想创建一个脚本(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);
};
发送数据的示例:
示例中的Base64:WndpbmkZdGEgbmkHIHRvIGtCGWJlay4=