-
-
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, '');