Php 通过JSONP发送数据时丢失字符
我想创建一个脚本(javascript file.JS),我可以把它从我的域放到每个网站上。脚本必须从网站读取文本并将其发送到服务器。服务器位于另一个域,而不是它从中读取文本的网站,这就是我使用JSONP的原因。读到的文本可以用不同的方式(不同的语言-世界各地的网站)进行字符化,它们可以很长,这就是为什么在发送它们之前,我用base64对它们进行编码,将它们分成数据包,并使用GET(JSONP)单独发送它们 如果没有Php 通过JSONP发送数据时丢失字符,php,javascript,character-encoding,jsonp,base64,Php,Javascript,Character Encoding,Jsonp,Base64,我想创建一个脚本(javascript file.JS),我可以把它从我的域放到每个网站上。脚本必须从网站读取文本并将其发送到服务器。服务器位于另一个域,而不是它从中读取文本的网站,这就是我使用JSONP的原因。读到的文本可以用不同的方式(不同的语言-世界各地的网站)进行字符化,它们可以很长,这就是为什么在发送它们之前,我用base64对它们进行编码,将它们分成数据包,并使用GET(JSONP)单独发送它们 如果没有getJson()函数的定义,代码是: var sBase64Code = ba
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\u decode()
对数据进行解码后,发现与英语不同的字符丢失了
mb_convert_编码(base64_decode($b64),mb_detect_编码(base64_decode($b64))
不起作用
JavaScriptbase64\u 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\u编码(数据){
变量b64='ABCDEFGHIJKLMNOPQRSTUVXYZABCDFGHIJKLMNOPQRSTUVXYZ0123456789+/=';
var o1,o2,o3,h1,h2,h3,h4,位,i=0,ac=0,enc=”,tmp_arr=[];
如果(!data)返回数据;
做{
o1=data.charCodeAt(i++);
o2=data.charCodeAt(i++);
o3=data.charCodeAt(i++);
位=o18&0x3f;
h2=位>>12&0x3f;
h3=位>>6&0x3f;
h4=位&0x3f;
tmp_arr[ac++]=b64.charAt(h1)+b64.charAt(h2)+b64.charAt(h3)+b64.charAt(h4);
}而(i
发送数据的示例:
示例中的Base64:
WndpbmkZdGEgbmkHIHRvIGtCGWJlay4=
尝试从此处使用函数编码/解码-