我有一个简单的POST来自我的iPhone应用程序。它的工作正常,除了通过一个&符号导致后端中断 - 这几乎就像它将它视为GET请求(&符号分隔变量名称)。我需要先进行某种编码吗?这是代码:
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];
答案 0 :(得分:7)
我在iOS7中遇到过这个问题,并且接受的答案根本不起作用(实际上,这是我向后端发送数据时的标准)。 &符号在后端打破了,所以我不得不更换& %26。后端是在python中完成的,代码是遗留的,并且正在使用ASI。
基本上我做了以下事情:
NSString *dataContent = [NSString stringWithFormat:@"text=%@",
[json stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
dataContent = [dataContent stringByReplacingOccurrencesOfString:@"&"
withString:@"%26"];
答案 1 :(得分:1)
ByAddingPercent .......将无法正常工作是一个有效的URL字符。
我需要发送带有&的JSON。在其中,它是相同的想法;
NSString *post = [NSString stringWithFormat:@"JSON=%@", (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)jsonString, NULL, CFSTR(":/?#[]@!$&’()*+,;="), kCFStringEncodingUTF8))];
“jsonString”到底是转换的。
答案 2 :(得分:0)
编辑:由于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];
答案 3 :(得分:0)
我不确定这是否适用于您的情况,但您可以尝试使用%38来尝试对&符号进行编码。