Savon - base64binary de données en PHP
J'ai un client SOAP en PHP qui permet d'appeler un fichier WSDL du service. L'une des fonctions renvoie une base64binary de données. J'ai essayé de décoder sans un peu de chance.
base64_decode($encoded_base64data) ne fonctionnera pas. J'ai essayé d'utiliser base_convert() et mv_convert_encoding() avec des paramètres différents, mais ne pouvait pas obtenir un bon résultat.
Le résultat codé des données commence avec:
��`I�%&/m�{J�J��t��`$ؐ@�������iG#)�*��eVe]f@�흼��{����{����;�N'���?\fdl��J�ɞ!���?~|?"
(données est beaucoup plus, c'est juste une petite partie de la chaîne)
Aucune idée de comment ça pourrait se faire?
Grâce
MODIFIER
J'ai étendu le SoapClient avec un nouveau __doRequest() méthode pour vérifier que les données reçues sont une bonne chaîne base64. J'ai eu une bonne chaîne encodée en base64, et le résultat ci-dessus est décodé réponse.
De toute façon, la chaîne a été décodé automatiquement par le SoapClient de base64 en binaire (comme @hakre suggéré), donc je n'ai que de traiter avec les binaires de réponse.
Maintenant j'ai besoin de décoder la chaîne binaire en quelque chose qui ressemblerait à un format lisible. La réponse finale doit contenir géorgien de sortie, donc je suis à essayer de comprendre le codage d'origine (mais c'est une autre question).
base64_decode($encoded_base64data) signifie qu'il ne donnera pas une bonne chaîne de caractères (avec encodage). Cela est vrai pour toutes mes autres tentatives. Divers paramètres 'BASE64' et 'UTF-8' pour mv_convert_encoding() et certains entiers pour base_convert(). Aucun de ceux qui m'a donné une bien décodé réponse....
"code exact utilisé" serait base64_decode($encoded_base64data). Je pense que la question est assez clair déjà.
Non, la question n'est absolument pas clair, sinon je n'aurais pas demandé. Base64 n'est pas aussi avancé, et
base_convert()
ne sera probablement pas contenir un bug spécifique à votre situation, de sorte que le problème est dans vos données. Si vous ne montrez pas vos données et la façon de vous assurer de data == base64_decode(base64_encode(data))
, cette question ne peut être répondu.La chaîne de caractères que vous avez indiqué n'a pas l'air encodées en base64 pour moi. Chaînes codées en Base64 ont tendance à regarder un peu comme ceci:
dGhpcyBzdHJpbmcgd2FzIGJhc2U2NCBlbmNvZGVk
. Ils n'utilisent 64 caractères différents, (a-zA-Z0-9, et deux plus standard des caractères spécifiques) et parfois le signe égal (=) caractère de remplissage
OriginalL'auteur galchen | 2013-06-03
Vous devez vous connecter pour publier un commentaire.
De base64Binary (XML Schema Part 2: Datatypes 3.2.16):
Vous de le commenter:
Vous êtes censé recevoir une chaîne encodée en base64. Que encodées en base64 chaîne représente les données binaires. Si vous connaissez la spécification XML, ce serait peut-être plus évident parce que vous ne pouvez pas passer binaire de l'information avec XML, vous ne pouvez transmettre les informations que fit en XML-gamme. Et la portée exclut les caractères qui font partie des données binaires, en particulier les caractères de contrôle et de la hausse du volet si vous divisez l'octet binaire dans un inférieur et un supérieur. Voir Caractères (Extensible Markup Language (XML) 1.0 (Cinquième Édition) 2.2) qui montre que XML est sur les personnages, pas de données binaires. Et qui montre également les données binaires de ces personnages n'formulaire (et qu'ils ne peuvent pas former).
Donc la base64Binary de codage a été défini comme un moyen de transport de données binaires à l'intérieur d'un document XML. Donc, ce que vous avez à l'intérieur de la cru de XML de réponse à votre requête SOAP n'est jamais binaire mais encodé en base64 des données binaires.
Prendre soin de votre SAVON client pourrait traitent déjà de ce codage et de fournir les données décodées.
Idéal pour souligner que SoapClient automatiquement gère l'encodage. J'ai été faire le double encodage :/
OriginalL'auteur hakre
Bien que la réponse précédente est tout à fait exact mais je pense qu'il peut être utile d'obtenir une solution rapide.
Lorsque l'on contrôle la réponse xml puis nous voyons des données encodées en base64 et nous essayons de le décoder dans notre code pour obtenir les données réelles, mais il n'est pas nécessaire.
Supprimer
base64_decode
.Parce que le SAVON client en interne décoder lui-même.
OriginalL'auteur Amit Garg