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, dass data == 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.

InformationsquelleAutor galchen | 2013-06-03
Schreibe einen Kommentar