单个部分表单中丢失的百分比编码,但是以多部分形式工作?

时间:2014-03-21 16:42:10

标签: php objective-c forms encoding

我一直在我的目标C中使用单个部分的http post表单将数据上传到服务器(PHP),然后使用单独的多部分表单来上传文件。

由于种种原因,我刚刚决定将其合并为单一的多部分形式。

然而,当在iPhone上使用完全相同的objc时(意味着当我在发送我发送的内容时,它的百分比编码方式相同),并且在服务器上完全相同的php我已经意识到不知何故,百分比编码的字符串在单一部分形式中沿途丢失了百分比编码,而使用多部分表单则保留百分比编码。

在单一部分表格中,相关部分如下:

params =[NSString stringWithFormat:@"string=%@", PERCENT_ENCODED_STRING];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:[params dataUsingEncoding:NSUTF8StringEncoding]];

如果我NS注销params,编码就在那里。

而在多部分形式中,相关部分就像这样

    [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];  //boundary of post data section
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: text/plain; name=%@\r\n", @"string"] dataUsingEncoding:NSUTF8StringEncoding]];  //dataname
    [body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];  //blank line
    [body appendData:[PERCENT_ENCODED_STRING dataUsingEncoding:NSUTF8StringEncoding]];  //actual data
    [body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];  //end of line
...
[request setHTTPMethod:@"POST"];
[request setHTTPBody:body];

在每种情况下,php都完全相同。

以前有人遇到过这个吗?

我非常清楚我可能只是在做一些愚蠢的事情,但我一整天都在关注这一点,却无法弄清楚发生了什么。

提前致谢

1 个答案:

答案 0 :(得分:0)

我刚刚找到了这个

application/x-www-form-urlencoded or multipart/form-data?

和这个

http://www.w3.org/TR/html401/interact/forms.html

似乎我所发现的是由于以下原因应该发生的事情:单个部分表单被编码(并且可能由另一端的php解码以取消它)。多部分表单不进行编码,因为它们处理大量数据,这可能会使它们更长。因此,我认为它们不会在另一端被解码,就像我假设单个部分形式一样。

所以,既然我正在处理它们已经编码的字符串,那么php认为它需要从单个部分形式解码它(因为它不知道它实际上是我编码它,而我希望它保持这种状态),而且多部分形式的那个只是保持原样。

如果我开始使用非编码字符串,则在两种情况下都应该相同。

也许..

现在假设这是正确的,我只需要考虑该怎么做(最优雅的解决方案),因为我的应用程序在不同的地方使用单个和多个部分表单,并且我希望字符串在它们一旦保持编码交给了php。