gpt4 book ai didi

php - Soap - PHP 中的 base64 二进制数据

转载 作者:可可西里 更新时间:2023-11-01 12:27:47 24 4
gpt4 key购买 nike

我有一个 PHP 中的 SOAP 客户端,它调用 WSDL 服务。其中一个函数返回 base64binary 数据。我一直在尝试解码它,但没有任何运气。

base64_decode($encoded_base64data) 将不起作用。我尝试使用带有各种参数的 base_convert() 和 mv_convert_encoding(),但无法获得正确的结果。

编码后的结果数据以:

��`I�%&/m�{J�J��t��`$ؐ@�������iG#)�*��eVe]f@�흼��{����{����;�N'���?\fdl��J�ɞ!���?~|?"

(数据比较长,这只是字符串的一小部分)

知道怎么做吗?

谢谢

编辑

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

无论如何,字符串由 SoapClient 自动从 base64 解码为二进制(正如@hakre 所建议的),所以我只需要处理二进制响应。

现在我需要的是将二进制字符串解码为看起来像可读格式的格式。最终响应应包含格鲁吉亚输出,因此我试图找出原始编码(但这是一个不同的问题)。

最佳答案

来自 base64Binary (XML Schema Part 2: Datatypes 3.2.16) :

[Definition:] base64Binary represents Base64-encoded arbitrary binary data. The value space of base64Binary is the set of finite-length sequences of binary octets. For base64Binary data the entire binary stream is encoded using the Base64 Content-Transfer-Encoding defined in Section 6.8 of [RFC 2045].

然后你评论:

When a WSDL has xsd:base64binary am I supposed to get a base64 response or a binary response or a base64 encoded string?

您应该得到一个 base64 编码的字符串。该 base64 编码字符串表示二进制数据。如果您了解 XML 规范,这可能会更明显,因为您不能使用 XML 传递二进制信息,您只能传递适合 XML 字符范围的信息。并且该范围不包括属于二进制数据的字符,尤其是控制字符和较高的 Pane (如果将二进制八位字节划分为较低和较高的八位字节)。参见 Characters (Extensible Markup Language (XML) 1.0 (Fifth Edition) 2.2)这表明 XML 是关于字符的,而不是二进制数据。并且还显示了这些字符形成了哪些二进制数据(以及它们不能形成哪些二进制数据)。

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

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

关于php - Soap - PHP 中的 base64 二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16893934/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com