在JavaScript中的javascript解码中的base64编码

时间:2016-05-03 00:14:48

标签: javascript php character-encoding base64

我正在尝试在javascript中编码一个字符串并在php中对其进行解码。

我使用此代码将字符串放入输入框,然后通过表单PUT发送。

document.getElementById('signature').value= b64EncodeUnicode(ab2str(signature));

此代码解码

$signature=base64_decode($signature);

这里有一个编码页面的jsfiddle: https://jsfiddle.net/okaea662/

问题是我总是得到98%正确的字符串,但有一些不同的字符。 例如:(第一个字符串是输入框中打印的字符串)

|S÷ä½m0×C | U>£áWÅàUù»¥ïs7Dþ1Ji%YE {\ö°(úýýÁñxçO9Ù¡ö}XÇIWçβÆü8ú²ðÑOA¤nì6S+̽ i¼?¼ºNËÒo·a©8»eO|PPþBE=HèÑqaX©$Ì磰©b2(Ðç.$nÈR,ä_OX¾xè¥3éÂòkå¾ N,sáW§ÝáV:ö〜A×A< 4)íÇKo¡L¤<Í»AA(! XON#WÙÕGù¾g!)UC)] Q(*}?IP

|S÷ä½m0×C | u>£áWÅàUù»¥ïs7Dþ1Ji%ýÊ{\ö°(úýýÁñxçO9Ù¡ö}XÇIWçβÆü8ú²ðÑOA¤nì6S+̽ i¼?¼ºNËÒo·a©8»eO|PPþBE=HèÑ qaX©$Ì磰©b2(Ðç.$nÈR,ä_OX¾xè¥3éÂòkå¾ N ,sá W§ÝáV:ö~Å×à< 4)íÇKo¡L¤<Í»äA(! XON#WÙÕGù¾g!)UC)] Q(*}?IP

请注意,第四个字符是不同的,然后在某处有一两个字符。 字符串对应于数字签名,因此这些字符使签名无效。

我不知道这里发生了什么。任何的想法?我在标题和元组中使用Chrome浏览器和utf-8编码(Firefox似乎在输入框中使用不同的编码,但我稍后会看到该问题)

编辑:

对base64的编码显然不是问题。 base64编码的字符串在浏览器中与在服务器中相同。如果我在javascript中对它进行base64解码,我会得到原始字符串,但如果我在PHP中解码它,我会得到一个稍微不同的字符串。

EDIT2: 我仍然不知道问题是什么,但我已经避免了用ajax在blob中发送数据。

1 个答案:

答案 0 :(得分:1)

尝试使用此命令使用js编码字符串:

var signature = document.getElementById('signature');
var base64 = window.btoa(signature);

现在使用php,您只需使用:base64_decode($signature)

如果这不起作用(我还没有测试过),btoa func可能有问题。所以在这里查看此链接:

https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding

那里有一个应该有效的功能(如果上面没有的话)

function b64EncodeUnicode(str) {
    return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
        return String.fromCharCode('0x' + p1);
    }));
}

b64EncodeUnicode(signature); // "4pyTIMOgIGxhIG1vZGU="