JSPM

escape64

0.0.14102455
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 3
  • Score
    100M100P100Q21890F
  • License MIT

Escaped Base64 codec

Package Exports

  • escape64

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (escape64) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Build Status #escape64

Intro

Using standard Base64 in URLs requires encoding of +, / and = characters into special percent-encoded hexadecimal sequences (+ becomes %2B, / becomes %2F and = becomes %3D), which makes the string unnecessarily longer.
For this reason, modified Base64 for URL variants exist, where the + and / characters of standard Base64 are respectively replaced by - and _, so that using URL encoders/decoders are no longer necessary and have no impact on the length of the encoded value


Both above solutions lack a very usefull property for URLs. Double Click mouse selection!


Definition

Escape64 is a variable length variant of Base64 that solves this in a intiutive way.
_ is used as an escape character and we define the following escape sequences

    __      beginging of an Escape64 sequence (optional)
    
    _p      encodes a (+) of Base64
    _d      encodes a (/) of Base64
    _q      encodes a (=) pad character of Base64
    
    _b      marks breaks inside an Escape64 sequence (optional)
    
    _*      Reserved. Where (*) can be any char not expicitly mentioned above.   

Example Implementation

var x = 'asdf+ff/f+ff/dd+ddAd==';                                         //base64 value
var y = x.replace(/[+]/g,'_p').replace(/[\/]/g,'_d').replace(/[=]/g,'_q');//escape64 value encode
var z = y.replace(/_p/g,'+').replace(/_d/g,'/').replace(/_q/g,'=');       //escape64 value decode

console.log(x, y, z);
console.log(z);
console.log(x==z);

https://en.wikipedia.org/wiki/Base64