2016-05-03 10 views
1

Ich versuche, eine Zeichenfolge in JavaScript zu codieren und dekodieren es in PHP.Base64 Codierung in JavaScript-Decodierung in PHP

Ich benutze diesen Code, um die Zeichenfolge in ein Eingabefeld zu setzen und dann über das Formular PUT zu senden.

document.getElementById('signature').value= b64EncodeUnicode(ab2str(signature)); 

Und dieser Code

$signature=base64_decode($signature); 

Hier gibt es eine jsfiddle für die Codierung Seite zu entschlüsseln: https://jsfiddle.net/okaea662/

Das Problem ist, dass ich immer einen String 98% korrekt, aber mit einigen bekommen verschiedene Charaktere. Zum Beispiel: (der erste String die Zeichenfolge im inputbox gedruckt)

|S ÷ ä½m0 × C | u> £ áWÅàUù »¥ ïs7Dþ1Ji% YE {\ ö ° (úýýÁñxçO9Ù¡ ö}XÇIWçβÆü8ú²ðÑOA¤nì6S+̽ i¼?¼ºNËÒo·a©8»eO|PPþBE=HèÑqaX©$Ì磰©b2(Ðç.$nÈR,ä_OX¾xè¥3éÂòkå¾ N,sáW§ÝáV: ö ~ Å × à < 4) íÇKo¡L¤ < Í »aA (xon # WÙÕGù¾g) uc)] Q (*} iP

|S ÷ ä½m0 × C |!? u> £ áWÅàUù» ¥ ïs7Dþ1Ji% YE {\ ö ° (úýýÁñxçO9Ù¡ ö}XÇIWçβÆü8ú²ðÑOA¤nì6S+̽ i¼?¼ºNËÒo·a©8»eO|PPþBE=HèÑ qaX©$Ì磰©b2(Ðç.$nÈR,ä_OX¾xè¥3éÂòkå¾ N ,sá W§ÝáV: ö ~ Å × à < 4) íÇKo¡L¤ < Í »aA (! xon # WÙÕGù¾g!) uc)] Q (*}? iP

Beachten Sie, dass das 4. Zeichen verschieden ist und dann gibt ist ein oder zwei mehr irgendwo. Die Zeichenfolge entspricht einer digitalen Signatur, daher machen diese Zeichen die Signatur ungültig.

Ich habe keine Ahnung, was hier passiert. Irgendeine Idee? Ich benutze Chrome-Browser und utf-8-Codierung in Header und metas (Firefox scheint eine andere Codierung in der inputbox zu verwenden, aber ich werde später das Problem aussehen)

EDIT:

Die Codierung base64 ist offenbar nicht die Problem. Die Base64-codierte Zeichenfolge ist im Browser dieselbe wie im Server. Wenn ich base64-decodiere es in Javascript, bekomme ich die ursprüngliche Zeichenfolge, aber wenn ich es in PHP dekodieren bekomme ich eine etwas andere Zeichenfolge.

EDIT2: Ich weiß immer noch nicht, was das Problem ist, aber ich habe es vermieden, die Daten in einem Blob mit Ajax zu senden.

+2

Sie sind also binäre Daten einfügen und erwarten, dass Texteingaben werden akzeptiere sie erfolgreich? – zerkms

+0

_ "Ich versuche eine Zeichenfolge in Javascript zu codieren" _ Als welches Format kodieren? Nicht sicher, welche Anforderung ist? – guest271314

+0

Das Problem ist weder die Kodierung in JS noch die Dekodierung in PHP.Das Problem ist, dass Sie versuchen, Binärdaten aus einer externen Quelle in ein HTML-Formular zu kopieren und einzufügen. Der * gesunde * Ansatz * würde darin bestehen, die * externe Quelle * die Daten in base64 [oder einer anderen 7-Bit-sicheren Kodierung] kodieren zu lassen, um sicherzustellen, dass die Daten ungehindert durch das System gelangen. – Sammitch

Antwort

1

Versuchen Sie diesen Befehl mit der Zeichenfolge mit js zu kodieren:

var signature = document.getElementById('signature'); 
var base64 = window.btoa(signature); 

Jetzt mit php Sie einfach verwenden: base64_decode($signature)

Wenn das nicht funktioniert (ich habe es nicht getestet) gibt kann etwas falsch sein mit der btoa func. So Kasse diesen Link hier:

https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding

Es gibt eine Funktion darin, dass funktionieren sollte (wenn die oben nicht der Fall ist)

function b64EncodeUnicode(str) { 
    return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) { 
     return String.fromCharCode('0x' + p1); 
    })); 
} 

b64EncodeUnicode(signature); // "4pyTIMOgIGxhIG1vZGU=" 
+0

Ich benutze bereits b64EncodeUnicode. Ich habe auch mit btoa und einigen anderen Kodierungsfunktionen versucht. Immer ähnliche Probleme. – juanjo75es