PHP中的Soap-base64二进制数据

PHP中的Soap-base64二进制数据,php,soap,encoding,wsdl,base64,Php,Soap,Encoding,Wsdl,Base64,我有一个PHP中的SOAP客户端,它调用WSDL服务。其中一个函数返回base64二进制数据。我一直在试图破译它,但没有任何运气 base64_解码$encoded_base64数据将无法工作。我尝试使用base_convert和mv_convert_编码和各种参数,但没有得到正确的结果 编码的结果数据以以下内容开头: ��`I�%&/m�{J�J��t��`$ؐ@�������iG#)�*��eVe]f@�흼��{����{����;�N'���?\fdl��J�ɞ!���?~|?"

我有一个PHP中的SOAP客户端,它调用WSDL服务。其中一个函数返回base64二进制数据。我一直在试图破译它,但没有任何运气


base64_解码$encoded_base64数据将无法工作。我尝试使用base_convert和mv_convert_编码和各种参数,但没有得到正确的结果

编码的结果数据以以下内容开头:

��`I�%&/m�{J�J��t��`$ؐ@�������iG#)�*��eVe]f@�흼��{����{����;�N'���?\fdl��J�ɞ!���?~|?"
数据要长得多,这只是字符串的一小部分

你知道怎么做吗

谢谢

编辑

我用一个新的_udorequest方法扩展了SoapClient,以检查接收到的数据是否是正确的base64字符串。我得到了一个正确的base64编码字符串,上面显示的结果是解码响应

无论如何,SoapClient按照@hakre的建议将字符串从base64自动解码为二进制,因此我只需要处理二进制响应

现在我需要的是将二进制字符串解码成一种可读的格式。最后的响应应该包含格鲁吉亚语输出,因此我试图找出原始编码,但这是一个不同的问题。

来自:

[定义:]base64Binary表示Base64编码的任意二进制数据。Base64二进制的长度是二进制八位字节的有限长度序列集。对于Base64二进制数据,使用中定义的Base64内容传输编码对整个二进制流进行编码

然后你评论:

当WSDL具有xsd:base64binary时,我应该得到base64响应、二进制响应还是base64编码的字符串

您应该得到一个base64编码的字符串。base64编码的字符串表示二进制数据。如果您知道XML规范,这可能更明显,因为您不能用XML传递二进制信息,只能传递适合XML字符范围的信息。这个范围不包括作为二进制数据一部分的字符,特别是控制字符和更高的窗格(如果将二进制八位字节分为更低和更高的八位字节)。看看哪个显示XML是关于字符的,而不是关于二进制数据的。这也显示了这些字符形成了哪些二进制数据,以及它们不能形成哪些二进制数据

因此,Base64二进制编码被定义为在XML文档中传输二进制数据的一种方法。因此,对SOAP请求的原始XML响应中包含的不是二进制数据,而是base64编码的二进制数据


请注意,您的SOAP客户端可能已经处理了这种编码并提供了解码的数据。

虽然前面的答案绝对正确,但我觉得这可能有助于快速解决问题

当我们签入响应xml时,我们会看到base64编码的数据,并尝试在代码中对其进行解码以获得真实数据,但这不是必需的

删除base64_解码


因为SOAP客户端在内部自行解码。

将无法工作,各种参数和正确的结果并没有真正的帮助。显示准确的输入、使用的准确代码、准确的输出和预期的输出。base64_decode$encoded_base64数据意味着它不会给出具有预期编码的正确字符串。这对我所有的其他尝试都是正确的。对于mv_convert_编码,各种参数将是'BASE64'和'UTF-8',对于base_convert,一些参数将是整数。这两个都没有给我一个很好的解码响应……使用的确切代码是base64\u decode$encoded\u base64数据。我认为这个问题已经很清楚了。不,这个问题绝对不清楚,否则我就不会问了。Base64并没有那么高级,并且base_convert很可能不包含特定于您的情况的bug,因此问题在于您的数据。如果不显示数据以及验证data==base64\u decodebase64\u encodedata的方式,则无法回答此问题。您显示的字符串在我看来不是base64编码的。Base64编码的字符串看起来有点像这样:dGhpcyBzdHJpbmcgd2FzIGJhc2U2NCBlbmNvZGVk。它们只使用64个不同的字符,a-zA-Z0-9和另外两个标准的特定字符,有时还使用equals=字符填充。正如您所建议的,SoapClient已经自动解码了输出。还没有解决我的问题,但肯定回答了我的问题。感谢您指出SoapClient自动管理编码。我在做双重编码:/非常感谢您指出SOAPClient自动管理编码。你是我今天的英雄。