【发布时间】:2013-05-29 10:31:11
【问题描述】:
我有一个用 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 建议的那样),所以我只需要处理二进制响应。
现在我需要将二进制字符串解码为看起来像可读格式的东西。最终响应应该包含格鲁吉亚语输出,所以我试图找出原始编码(但这是一个不同的问题)。
【问题讨论】:
-
“将不起作用”、“各种参数”和“正确的结果”并没有真正的帮助。显示准确的输入、使用的准确代码、准确的输出和您期望的输出。
-
base64_decode($encoded_base64data) 表示它不会给出正确的字符串(具有预期的编码)。我的所有其他尝试都是如此。 mv_convert_encoding() 的各种参数是“BASE64”和“UTF-8”,base_convert() 的参数是一些整数。这些都没有给我一个很好解码的响应....
-
“使用的确切代码”将是 base64_decode($encoded_base64data)。我认为这个问题已经很清楚了。
-
不,这个问题绝对不清楚,否则我不会问。 Base64 不是那么先进,
base_convert()很可能不会包含特定于您的情况的错误,因此问题出在您的数据中。如果你不显示你的数据和验证data == base64_decode(base64_encode(data))的方式,这个问题根本无法回答。 -
您显示的字符串在我看来不像 base64 编码。 Base64 编码的字符串看起来有点像这样:
dGhpcyBzdHJpbmcgd2FzIGJhc2U2NCBlbmNvZGVk。它们仅使用 64 个不同的字符(a-zA-Z0-9 和另外两个标准特定字符),有时使用等号 (=) 字符进行填充
标签: php soap encoding wsdl base64