Gönner-Abo

Ab CHF 5.– im Monat

👉🏼 Wir benötigen deine Unterstützung! Unterstütze macprime mit einem freiwilligen Gönner-Abo und mache die Zukunft unseres unabhängigen Apple-Mediums aus der Schweiz mit möglich.

macprime unterstützen

Javascript und mime64

 

VonAntwort von tota

Ich möchte ein Widget schreiben, dass mir einen LDAP Server anfragt und gemäss der Eingabe von Namen oder Telefonnummer den oder die vorhandenen Personendaten ausgibt.

Mein erstes Problem ist allerdings, dass der LDAP Server die Daten im mime:base64 Format gespeichert hat und ausgibt. Wie bringe ich dies nun am effizientesten javascript bei, dass es die Sonderzeichen richtig anzeigt?

Habe leider keinen Wert für charset gefunden, der der Codierung mimie:base64 entspricht.

Danke für eure Hilfe und Tipps.

Freundliche Grüsse Thomas Thaler

Unsere Sponsoren

Profilfoto von hirnstroem

hirnstroem

Das ganze muss wohl oder übel decodiert werden. Base64 repräsentiert ein Zeichen mit jeweils 6 bit und es gibt eh nur 64 Zeichen, oder 65 wenn man das “=” dazunimmt, aber dann passt ja der Name nicht mehr. Auf jeden Fall wird das folgendermassen gemacht:

00:        function b64t2d(t) {
01:             var d=[]; var i=0;
02:             // zur decodierung die Umbrueche killen
03:             t=t.replace(/n|r/g,""); t=t.replace(/=/g,"");
04:             while (i<t.length)
05:                 {
06:                 d[d.length] = (f64[t.charAt(i)]<<2>>4);
07:                 d[d.length] = (((f64[t.charAt(i+1)]&15;)<<4>>2));
08:                 d[d.length] = (((f64[t.charAt(i+2)]&3)<<6) | (f64[t.charAt(i+3)]));
09:                 i+=4;
10:                 }
11:             if (t.length%4 == 2)
12:                 d = d.slice(0, d.length-2);
13:             if (t.length%4 == 3)
14:                 d = d.slice(0, d.length-1);
15:             return d;
16:             }

Encodieren geht auch:

00:        function encode_base64(d) {
01:             var r=[]; var i=0; var dl=d.length;
02:             // Padding vorbereiten
03:             if ((dl%3) == 1) {
04:                 d[d.length] = 0; d[d.length] = 0;}
05:             if ((dl%3) == 2)
06:                 d[d.length] = 0;
07:             // Konvertieren
08:             while (i<d.length)
09:                 {
10:                 r[r.length] = b64[d[i]>>2];
11:                 r[r.length] = b64[((d[i]&3)<<4>>4)];
12:                 r[r.length] = b64[((d[i+1]&15;)<<2>>6)];
13:                 r[r.length] = b64[d[i+2]&63;];
14:                 if ((i%57)==54)
15:                     r[r.length] = "n";
16:                 i+=3;
17:                 }
18:             // padding abschließen
19:             if ((dl%3) == 1)
20:                 r[r.length-1] = r[r.length-2] = "=";
21:             if ((dl%3) == 2)
22:                 r[r.length-1] = "=";
23:             // Array in text zusammenführen
24:             var t=r.join("");
25:             return t;
26:             }

So sollte das funtzen.

Anmelden um neue Antworten zu verfassen

Allegra Leser! Nur angemeldete Nutzer können bei diesem Beitrag Antworten hinterlassen. Jetzt kostenlos registrieren oder mit bestehendem Benutzerprofil anmelden.