我一直在我的目标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都完全相同。
以前有人遇到过这个吗?
我非常清楚我可能只是在做一些愚蠢的事情,但我一整天都在关注这一点,却无法弄清楚发生了什么。
提前致谢
答案 0 :(得分:0)
我刚刚找到了这个
application/x-www-form-urlencoded or multipart/form-data?
和这个
http://www.w3.org/TR/html401/interact/forms.html
似乎我所发现的是由于以下原因应该发生的事情:单个部分表单被编码(并且可能由另一端的php解码以取消它)。多部分表单不进行编码,因为它们处理大量数据,这可能会使它们更长。因此,我认为它们不会在另一端被解码,就像我假设单个部分形式一样。
所以,既然我正在处理它们已经编码的字符串,那么php认为它需要从单个部分形式解码它(因为它不知道它实际上是我编码它,而我希望它保持这种状态),而且多部分形式的那个只是保持原样。
如果我开始使用非编码字符串,则在两种情况下都应该相同。
也许..
现在假设这是正确的,我只需要考虑该怎么做(最优雅的解决方案),因为我的应用程序在不同的地方使用单个和多个部分表单,并且我希望字符串在它们一旦保持编码交给了php。