2011-03-08 24 views
8

Bu yüzden güvendim. JS için birçok Base64 kodlayıcı/kod çözücüsü olduğunu biliyorum, ancak değiştirilmiş (ve Facebook'un tercih ettiği) Base64URL varyasyonu için değil. Şu ana kadar stackoverflow genelinde arama kurudu.Base64URL kod çözme, JavaScript ile mi?

Evet, bunu çözmek için PHP'yi veya başka bir sunucu tarafı kitaplığını kullanabilirim, ancak kullandığım platformdan bağımsız olarak bu evrenseli devam ettirmeye çalışıyorum ... örneğin bir HTML'yi barındırıyor olsaydım Amazon S3/CloudFront üzerinde sadece Facebook uygulaması ve sadece formları işleme ve veri alma ilgilenmek için kendi JS SDK ve jQuery kullanın.

Bu, herkes için herhangi bir Base64URL'ye özel kod çözücüyü biliyor mu?

Şimdiden teşekkürler!

+0

'Base64Url' kodlayan belirtilen [ RFC 4648, Base16, Base32 ve Base64 Veri Kodlamaları] (http://tools.ietf.org/html/rfc4648). Base64 ve Base64Url arasındaki tek fark iki değerdir (62 ve 63). Sadece "+" ile "-" ve ""/"' yi "_" ile değiştirin. – jww

+0

@jww bu doğru mu? var base64url = function (aStr) {dönüş btoa (aStr.replace (/ \ +/g, '-'). değiştirin (/ \ // g, '_')). değiştirin (/ \ = + $/m , '')} 'deneme ile' '' s stripped? – Noitidart

cevap

-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

Çözüm: Bu büyük bir base64 kodlama/kod çözme kullanarak

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

da padRight yöntemine bağlıdır

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

Merhaba Simeon ... Bunun işe yarayabileceğini düşünüyorum, ama aynı zamanda "-" ve "+" ile "_" ve "/" ile değiştirmem gerektiğini düşünüyorum - iyi bir başlangıç ​​noktası. Aynı kütüphanede sarılı olan her şeyi bulmayı umuyordum, ama sanırım kütüphaneyi biraz afterall olarak değiştirmek zorunda kalabilirim. – chrisfullman

+0

Garip ... aslında, bu cevabın bir JS sürümünü yaptım: http://stackoverflow.com/questions/1228701/code-for-decoding-encoding-a-modified-base64-url – Simeon