-
-
Save jhurliman/1250118 to your computer and use it in GitHub Desktop.
/* | |
* base64.js: An extremely simple implementation of base64 encoding / decoding using node.js Buffers | |
* | |
* (C) 2010, Nodejitsu Inc. | |
* (C) 2011, Cull TV, Inc. | |
* | |
*/ | |
var base64 = exports; | |
base64.encode = function(unencoded) { | |
return new Buffer(unencoded || '').toString('base64'); | |
}; | |
base64.decode = function(encoded) { | |
return new Buffer(encoded || '', 'base64').toString('utf8'); | |
}; | |
base64.urlEncode = function(unencoded) { | |
var encoded = base64.encode(unencoded); | |
return encoded.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); | |
}; | |
base64.urlDecode = function(encoded) { | |
encoded = encoded.replace(/-/g, '+').replace(/_/g, '/'); | |
while (encoded.length % 4) | |
encoded += '='; | |
return base64.decode(encoded); | |
}; |
I don't know that it's needed for the last one as the +
is greedy, but it shoudln't hurt
Thanks @netzmensch, encoded.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/g, '');
seems to work nicely.
The 'g' replacing '=' is not needed, the are equals only at the end of the string. But really useful implementation :)
Thanks @netzmensch,
encoded.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/g, '');
seems to work nicely.
is work.
The decode function is also missing global "-" and "_" replacement.
Line 25 should be: encoded = encoded.replace(/-/g, '+').replace(/_/g, '/');
.
Humans can I present the following for your critique.
I offer this as the replace function
'e8/51e2fa+4f/00+4609+9d/d2+9b3794c/59619====='.replace(/(\+)|(\/)|(=+$)/g,(match) => Object.create({'+': '-', '/': '_', '=': ''})[match[0]])
outputs e8_51e2fa-4f_00-4609-9d_d2-9b3794c_59619
@Rudiger86 nice! might be faster since it only walks through the string once.
I think I got it slightly simplified to:
'e8/51e2fa+4f/00+4609+9d/d2+9b3794c/59619====='.replace(/[+/=]/g, match =>
({'+': '-', '/': '_', '=': ''}[match])
)
This is slightly less robust because I replace every =
, but hey, in normal base64 strings =
es should only ever be at the end anyway.
thanks :)
For ASCII only use cases:
function encode(textToEncode) {
return btoa(textToEncode).replace(/\+/g, '~').replace(/\//g, '_').replace(/=/g, '-');
}
function decode(textToDecode: string): string {
return atob(textToDecode.replace(/~/g, '+').replace(/_/g, '/').replace(/-/g, '='));
}
Your line is also incorrect, as you missed the "g" for the last two replacements :)
encoded.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/g, '');