Soap base64binary Daten in PHP
Ich habe ein SOAP-client in PHP Aufrufe an eine WSDL-service. Eine der Funktionen gibt eine base64binary Daten. Ich habe versucht, Sie zu entschlüsseln ohne Glück.
base64_decode($encoded_base64data) wird nicht funktionieren. Ich habe versucht, mit base_convert() und mv_convert_encoding() mit verschiedenen Parametern, aber nicht bekommen konnte ein ordentliches Ergebnis.
Das verschlüsselte Ergebnis-Daten beginnt mit:
��`I�%&/m�{J�J��t��`$ؐ@�������iG#)�*��eVe]f@�흼��{����{����;�N'���?\fdl��J�ɞ!���?~|?"
(die Daten viel länger, dies ist nur ein kleiner Teil des Strings)
Irgendeine Idee, wie es getan werden könnte?
Dank
BEARBEITEN
Habe ich erweitert das SoapClient mit einem neuen __doRequest() Methode zu prüfen, dass die empfangenen Daten eine korrekte base64-string. Ich bekam eine angemessene base64-codierte Zeichenfolge, die das Ergebnis der oben gezeigt wird, die decodierte Antwort.
Jedenfalls, die Zeichenkette dekodiert automatisch von der SoapClient von base64 binary (als @hakre vorgeschlagen), so dass ich nur zu tun haben mit dem binäre Antwort.
Nun, was ich brauche, ist die Entschlüsselung der Binär-string in etwas Aussehen würde, wie ein lesbares format. Die endgültige Antwort sollte enthalten Georgische Ausgabe, so dass ich versuche, herauszufinden, die ursprüngliche Codierung (aber das ist eine andere Frage).
- "Nicht", "verschiedene Parameter" und "richtige Ergebnis" sind nicht wirklich hilfreich. Zeigen der exakten Eingabe der exakte code verwendet, die genaue Leistung und die Ausgabe, die Sie erwarten.
- base64_decode($encoded_base64data) bedeutet, dass es keine richtige Zeichenfolge (mit der erwarteten Kodierung). Dies gilt für alle meine anderen versuche. Verschiedene Parameter wäre 'BASE64' und 'UTF-8' für mv_convert_encoding() und einige ganze zahlen für base_convert(). Keiner von denen gab mir eine decodierte Antwort....
- "exakte code verwendet" werden würde, base64_decode($encoded_base64data). Ich denke die Frage ist klar genug bereits.
- Nein, die Frage ist absolut nicht klar, sonst würde ich nicht Fragen. Base64 ist nicht so weit, und
base_convert()
wird wahrscheinlich nicht enthalten einen bug, die auf Ihre spezielle situation, also das problem ist, das in Ihren Daten. Wenn Sie nicht zeigen Sie Ihre Daten und die Art und Weise, die Sie stellen Sie sicher, dassdata == base64_decode(base64_encode(data))
diese Frage kann einfach nicht beantwortet werden. - das ist etwa die einzigen Daten, die ich habe, um zu zeigen,
- Die Zeichenfolge, die Sie gezeigt haben, sieht nicht base64-codiert zu mir. Base64-codierte strings neigen dazu, sehen ein bisschen wie diese:
dGhpcyBzdHJpbmcgd2FzIGJhc2U2NCBlbmNvZGVk
. Benutzen Sie nur 64 verschiedene Zeichen (a-zA-Z0-9 und zwei weitere standard-spezifischen Zeichen) und manchmal auch die "equals" ( = ) Zeichen zum Auffüllen - Ich weiß, es ist base64binary
- ist die richtige. Was Sie immer zu sein scheint, base64-dekodiert(für falsche base64-string) und nicht base64-codierten Daten. Überprüfen Sie die zweite Antwort auf diese stackoverflow.com/questions/2556345/.... Die Zeichenfolge, die Sie bekommen, ist ähnlich dem decodierten Ergebnis angezeigt. Wahrscheinlich die Quelle der Daten ist die Dekodierung statt der Enkodierung (mixed encode/decode).
- Ich würde davon ausgehen, die Quelle (webservice) richtig funktioniert. Ich nahm an, dass die Ergebnisse, die ich bekommen ist binäre Daten. Wenn eine WSDL-hat xsd:base64binary soll ich die bekommen, die eine base64-Antwort oder eine binäre Antwort oder eine base64-codierte Zeichenfolge?
- Welche Art von Daten es sein sollte? Ich meine, ist es eine ausführbare Datei oder ein Bild? Was auch immer es sein sollte, es vielleicht schon dekodiert ist. Haben Sie jemals versucht, mit es in seinen Zweck, wie es zu speichern und in einer Datei anzeigen/ausführen? Schauen Sie sich bitte diesen Kommentar auf die Dokumentation: php.net/manual/pl/soapclient.soapclient.php#98658 Dieser Kerl sagt, dass, wenn Sie übergeben Sie Ihre Daten (mit SoapVar), die man besser nicht codieren Sie Ihre Daten mit base64_encode weil Seife (SoapVar?) tut es für Sie. Es könnte wahrscheinlich auch in die andere Richtung.
- Wenn Sie möchten, dass Benutzer basteln mit Ihren Daten, müssen Sie zumindest die hex-dump der Schnur neben der UTF-8-Ausgabe an, die Sie eingefügt haben zu deiner Frage. Siehe: Wie bekomme ich einen hex-dump von einem string in PHP?
- galchen, meiner Erfahrung nach Decodierung von text, der bereits dekodiert aus dem base64-format hat eine Ausgabe ähnlich zu dem, was Sie sehen. Kann es sein, dass der text in "$encoded_base64data" Ihr versucht, zu decodieren, decodiert hat schon oder war noch nie im base64-format zu beginnen. Überprüfen Sie den Inhalt des "$encoded_base64data" zu sehen, wenn es in das format, das Sie erwarten, dass vor dem ausführen einer Decodierung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vom base64Binary (XML Schema Part 2: Datatypes 3.2.16):
Du dann Kommentar:
Sollen Sie bekommen, die eine base64-codierte Zeichenfolge. Das base64-codierte string stellt der binären Daten. Wenn Ihnen die XML-Spezifikation, könnte dies deutlicher werden, weil Sie nicht passieren können binäre Informationen mit XML können Sie nur Informationen, die fit ist in XML die Zeichen-Palette. Und das Sortiment schließt die Charaktere, die Teil der binären Daten, insbesondere die Kontrolle Charaktere und die höheren Bereich, wenn Sie teilen Sie die binäre Oktett in eine niedrigere und höhere. Sehen Zeichen (Extensible Markup Language (XML) 1.0 (Fifth Edition) 2.2), die zeigt, dass XML über Zeichen, keine Binär-Daten. Und das zeigt auch, die binäre Daten diese Zeichen bilden (und Sie können nicht die form).
Daher die base64Binary encoding definiert wurde als eine Möglichkeit zum transport von binären Daten innerhalb eines XML-Dokuments. Also, was haben Sie innerhalb der rohen XML-Antwort auf eine SOAP-Anforderung ist nie binäre aber base64-codierte binäre Daten.
Achten, dass Ihre SOAP-client könnte schon viel mit dieser Enkodierung und liefern die Daten entschlüsselt werden.
Obwohl die Vorherige Antwort ist absolut richtig, aber ich denke, das kann hilfreich sein, um schnelle Lösung.
Wenn wir überprüfen Sie in der xml-Antwort, dann sehen wir, base64-kodierte Daten, und wir versuchen, Sie zu entschlüsseln in unseren code ein, um die realen Daten, aber es ist nicht erforderlich.
Entfernen
base64_decode
.Weil SOAP-client intern decodieren selbst.