1

自分のドメインからすべての Web サイトに配置できるスクリプト (javascript ファイル。JS) を作成したいと考えています。スクリプトは Web サイトからテキストを読み取り、それをサーバーに送信する必要があります。サーバーは、テキストを読み取る Web サイトとは別のドメインにあるため、JSONP を使用しています。読み取ったテキストはさまざまな方法 (さまざまな言語 – 世界中の Web サイト) で文字化される可能性があり、非常に長くなる可能性があるため、送信する前に 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