我有一个桌面应用程序,可以创建并向Web服务器发布大约2-3k的二进制数据。我已经使用HttpSendRequest
制作了发布文章,这对文本非常有效,但显然无法使用二进制文件。从我的研究看起来我需要{c}来编译来自我的c ++应用程序的数据,然后在PHP中使用base64
e来存储这些数据。
我已经下载了几个用于base64_decod
编码的c / c ++文件,但要么它们根本不起作用,要么编码与PHP编码不兼容。
我想我的问题是:
- 更新 - 过去一天我一直在玩这个,现在比以往更加困惑。这是数据:
我不确定哪里出了问题,但是任何有助于理顺这一点的帮助都将不胜感激!
- 更新2 - POST过程将编码数据中的+字符更改为空格。请参阅以下内容:
从C ++发布的数据:http://pastebin.com/NiSE7GUe
通过FTP复制到服务器:http://pastebin.com/S0qjfreM
为什么后期处理会改变这个角色有合理的理由吗?我更愿意理解并解决实际问题,但是执行字符串替换可能足以最终解决这个问题吗?
答案 0 :(得分:1)
Base64是一种定义良好的编码机制 - 因此实现之间不应存在不一致。如果你看到使用不同实现的一致失败,那么问题就在于编码算法以外的其他地方。
您可以通过简单地将输出转储到文件(甚至是控制台)来测试它。
实际上,虽然编码方法相对健壮,但有些字符可能具有特殊含义,具体取决于它们出现的上下文(URL,POST,Html)。除此之外,HTTP和大多数http客户端实现不同的传输和内容编码这一事实可能会引起额外的混淆。
如果我们看到您使用哪些代码来准备数据并调用HttpSendRequest
,这可能有所帮助答案 1 :(得分:0)
您可以使用libb64对输入进行base64编码,但是base64编码是相当标准的,所以我怀疑当您说其他库生成与PHP不兼容的编码时,您可能会做错。< / p>
您是否尝试将base64编码数据写入文件,然后使用PHP读取?这样你至少可以消除(看似不太可能)编码不兼容的机会。
编辑:
根据您发布的额外信息,您可能无法在将base64数据发送到HttpSendRequest之前对其进行正确的URL编码。 Base64虽然基于文本,仍然使用一些在url编码中具有不同含义的字符,
阅读this以获取有关编码的说明。我怀疑这就是为什么你的base 64字符串中的+在到达PHP时会丢失的原因,因为URL编码中的+实际上意味着空间。
因此,您应该在发送到HttpSendRequest之前尝试对字符串进行URL编码。我无法命名任何API来做到这一点,但它应该很简单,编写一个处理所有base64字符的API。至少,您需要将+
的实例替换为%2B
似乎PHP会对你进行解码,所以它只应该在发送之前进行编码,而不是在收到时进行解码。