所以我很难过。我知道有很多用于JS的Base64编码器/解码器,但不适用于修改过的(和Facebook赞成的)Base64URL变体。到目前为止,搜索stackoverflow已经枯竭了。
是的,我可以使用PHP或其他服务器端库对此进行解码,但无论我使用什么平台,我都会尝试保持这种通用性...例如,如果我要托管HTML-仅限Amazon S3 / CloudFront上的Facebook应用程序,并且只使用他们的JS SDK和jQuery来处理表单和获取数据。
那就是说,有没有人知道任何针对JavaScript的Base64URL特定解码器?
提前致谢!
答案 0 :(得分:2)
解决方案:
var b64str = base64.encode('foo bar');
// fix padding according to the new format
b64str = b64str.padRight(b64str.length + (4 - b64str.length % 4) % 4, '=');
使用这个伟大的base64编码/解码:http://code.google.com/p/stringencoders/source/browse/trunk/javascript/base64.js
还取决于padRight方法:
String.prototype.padRight = function(n, pad){
t = this;
if(n > this.length)
for(i = 0; i < n-this.length; i++)
t += pad;
return t;
}
答案 1 :(得分:2)
将此用于解码:
decode = function(input) {
// Replace non-url compatible chars with base64 standard chars
input = input
.replace(/-/g, '+')
.replace(/_/g, '/');
// Pad out with standard base64 required padding characters
var pad = input.length % 4;
if(pad) {
if(pad === 1) {
throw new Error('InvalidLengthError: Input base64url string is the wrong length to determine padding');
}
input += new Array(5-pad).join('=');
}
return input;
}
使用此功能后,您可以使用任何base64解码器
答案 2 :(得分:-3)
var str = "string";
var encoded = btoa(str); // encode a string (base64)
var decoded = atob(encoded); //decode the string
alert( ["string base64 encoded:",encoded,"\r\n", "string base64 decoded:",decoded].join('') );