2011-03-08 3 views
8

그래서 나는 뒤죽박죽이다. JS에 대한 Base64 인코더/디코더가 많이 있지만 수정 된 (그리고 Facebook에서 선호하는) Base64URL 변형에는 해당되지 않습니다. 지금까지 stackoverflow를 검색하는 것은 건조 해졌습니다.Base64URL은 (는) 자바 스크립트로 디코딩합니까?

예, PHP 또는 다른 서버 측 라이브러리를 사용하여 디코딩 할 수 있지만 사용중인 플랫폼에 상관없이 보편적으로 유지하려고합니다 ... 예를 들어 HTML Amazon S3/CloudFront에서만 Facebook 앱을 사용하고 JS SDK 및 jQuery를 사용하여 양식 처리 및 데이터 가져 오기를 수행합니다.

즉, JavaScript에 대한 Base64URL 전용 디코더는 누구나 알고 있습니까?

미리 감사드립니다.

+0

'Base64Url' 인코딩은에서 지정된다 RFC 4648, Base16, Base32 및 Base64 데이터 인코딩] (http://tools.ietf.org/html/rfc4648). 'Base64'와'Base64Url'의 유일한 차이는 두 값 (62와 63)입니다. 단지''+ ''''- "'와''/''를''_''로 대체하십시오. – jww

+0

@jww이 부분이 맞습니까? (/ \ // g, '_')). replace (/ \ = + $/m)'var base64url = function (aStr) {return btoa (aStr.replace (/ \ +/g, , '')}''시험을 치는'='을 벗겨 냈습니까? – Noitidart

답변

-2
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('')); 
2

해결책이 큰베이스 64 인코딩/디코딩을 사용

var b64str = base64.encode('foo bar'); 

// fix padding according to the new format 
b64str = b64str.padRight(b64str.length + (4 - b64str.length % 4) % 4, '='); 

: http://code.google.com/p/stringencoders/source/browse/trunk/javascript/base64.js

또한 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; 
} 
+0

안녕 Simeon ... 나는 이것이 작동 할 수 있다고 생각하지만 나는 또한 "-"와 "+"를 "_"과 "/"로 대체 할 필요가 있다고 생각한다 - 좋은 출발점. 모든 라이브러리가 하나의 라이브러리에 들어 있기를 기대했지만 라이브러리를 약간 수정해야 할 수도 있습니다. – chrisfullman

+0

이상한 ... 사실,이 답변의 JS 버전을 만들었습니다 : http://stackoverflow.com/questions/1228701/code-for-decoding-encoding-a-modified-base64-url – Simeon