Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过JavaScript进行Base64URL解码?_Javascript_Url_Base64_Decoding - Fatal编程技术网

通过JavaScript进行Base64URL解码?

通过JavaScript进行Base64URL解码?,javascript,url,base64,decoding,Javascript,Url,Base64,Decoding,所以我被难住了。我知道有很多用于JS的Base64编码器/解码器,但不适用于修改过的(Facebook喜欢的)Base64URL变体。到目前为止,在stackoverflow上的搜索都是徒劳的 是的,我可以使用PHP或其他服务器端库来解码这个,但无论我使用什么平台,我都试图保持这个通用性。。。例如,如果我在AmazonS3/CloudFront上托管一个只支持HTML的Facebook应用程序,并且只使用他们的JSSDK和jQuery处理表单和获取数据 也就是说,有人知道JavaScript的B

所以我被难住了。我知道有很多用于JS的Base64编码器/解码器,但不适用于修改过的(Facebook喜欢的)Base64URL变体。到目前为止,在stackoverflow上的搜索都是徒劳的

是的,我可以使用PHP或其他服务器端库来解码这个,但无论我使用什么平台,我都试图保持这个通用性。。。例如,如果我在AmazonS3/CloudFront上托管一个只支持HTML的Facebook应用程序,并且只使用他们的JSSDK和jQuery处理表单和获取数据

也就是说,有人知道JavaScript的Base64URL特定解码器吗

提前谢谢

解决方案:

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('') );
var b64str = base64.encode('foo bar');

// fix padding according to the new format
b64str = b64str.padRight(b64str.length + (4 - b64str.length % 4) % 4, '=');
使用此出色的base64编码/解码:

还取决于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;
}
String.prototype.padRight=函数(n,pad){
t=这个;
如果(n>此长度)
对于(i=0;i
解码前使用此选项:

var 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解码器

Hi-Simeon。。。我认为这是可行的,但我认为我还需要用“u”和“/”替换“-”和“+”——这是一个很好的起点。我希望能找到一个所有东西都封装在同一个库中的库,但我想我可能不得不稍微修改一点库。奇怪。。。实际上,我刚刚做了这个答案的JS版本:
Base64Url
编码是在中指定的。
Base64
Base64Url
之间的唯一区别是两个值(62和63)。只需将
“+”
替换为
“-”
,将
“/”
替换为
“\uquot
@jww,这是否正确
var base64url=function(aStr){return btoa(aStr.replace(//\+/g,'-')。replace(//\//g,'''''))。replace(//\=+$/m,')}
与trialing
=
剥离?这使用正常的、非url安全的映射字符。请参阅RFC 4648§5(),当您希望可以投票两次时:)