So I'm stumped. I know there's lots of Base64 encoders/decoders for JS, but not for the modified (and Facebook-favored) Base64URL variation. So far searching across stackoverflow has come up dry.
Yes, I could use PHP or another server-side library to decode this, but I'm trying to keep this universal regardless of what platform I'm using... for example, if I were to host a HTML-only Facebook app on Amazon S3/CloudFront and only use their JS SDK and jQuery to take care of processing forms and getting data.
That said, does anyone know of any Base64URL-specific decoders for JavaScript?
Thanks in advance!
use this befor decoding :
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;
}
after use this function you can use any base64 decoder
Solution:
var b64str = base64.encode('foo bar');
// fix padding according to the new format
b64str = b64str.padRight(b64str.length + (4 - b64str.length % 4) % 4, '=');
Using this great base64 encode/decode: http://code.google.com/p/stringencoders/source/browse/trunk/javascript/base64.js
Also depends on the padRight method:
String.prototype.padRight = function(n, pad){
t = this;
if(n > this.length)
for(i = 0; i < n-this.length; i++)
t += pad;
return t;
}
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('') );
来源:https://stackoverflow.com/questions/5234581/base64url-decoding-via-javascript