在POST请求导致混乱

我有一个简单的POST来自我的iPhone应用程序。 它的工作正常,除了传递一个&符号导致后端断开 – 它几乎就像它对待它像一个GET请求(&符分隔variables名称)。 我需要先做一些编码吗? 这里是代码:

NSString *content = [[NSString alloc] initWithFormat:@"data=%@&email=%@", str, emailAddress.text]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.myurl.com/myscript.php"]]; [request setHTTPMethod:@"POST"]; [request setHTTPBody:[content dataUsingEncoding:NSISOLatin1StringEncoding]]; // generates an autoreleased NSURLConnection [NSURLConnection connectionWithRequest:request delegate:self]; 

编辑:由于stringByAddingPercentEscapesUsingEncoding:应该被用来编码部分的查询,而不是整个,你应该使用另一种方法。

不幸的是,Foundation不提供这样的方法,所以你需要到达CoreFoundation:

 - (NSString *)stringByURLEncodingString:(NSString *)string { return (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes( kCFAllocatorDefault, (__bridge CFStringRef)string, NULL, // or (__bridge CFStringRef)(@"[].") (__bridge CFStringRef)(@":/?&=;+!@#$()',*"), kCFStringEncodingUTF8 ); } 

您可以使用

 - stringByAddingPercentEscapesUsingEncoding: 

在你的情况下,它会看起来像这样:

 NSString * content = [[NSString alloc] initWithFormat:@"data=%@&email=%@", [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding], [emailAddress.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 

你也可以这样做:

 NSString *dataStr = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSString *emailStr = [emailAddress.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSString *content = [[NSString alloc] initWithFormat:@"data=%@&email=%@", dataStr, emailStr]; 

我有这个问题在iOS7和接受的答案根本没有工作(实际上,这是我的标准时,发送数据到后端)。 &符号在后端打破了,所以我不得不用%26replace&。 后端是在Python中完成,代码是遗留的,并使用ASI。

基本上我做了以下几件事:

 NSString *dataContent = [NSString stringWithFormat:@"text=%@", [json stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; dataContent = [dataContent stringByReplacingOccurrencesOfString:@"&" withString:@"%26"]; 

ByAddingPercent …….将不能作为&是一个有效的URL字符。

我需要发送一个JSON与&,它是同样的想法,虽然;

 NSString *post = [NSString stringWithFormat:@"JSON=%@", (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)jsonString, NULL, CFSTR(":/?#[]@!$&'()*+,;="), kCFStringEncodingUTF8))]; 

“jsonString”到底是什么转换。

我不确定这是否适用于您的情况,但是您可以尝试%38尝试对&符号进行编码。