我正在尝试从我的iPhone客户端将数据发送到服务器。它适用于大多数值,但当我尝试发送像“IPhone + Cocoa”这样的字符串时,服务器将字符串显示为“IPhone Cocoa”。我试图谷歌它,但没有成功是为什么这样做。
这是我的代码
-(void)sendRequestNSString *)aRequest {
NSMutableURLRequest *request =
[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:kURLRequest]];
NSString *httpBody =
[NSString stringWithFormat:@"%@=%@",
[requestString stringByAddingPercentEscapesUsingEncoding:NSUTF8St ringEncoding],
[aRequest stringByAddingPercentEscapesUsingEncoding:NSUTF8St ringEncoding]];
NSData *aData = [httpBody dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:aData];
[request setHTTPMethod:@"POST"];
self.feedURLConnection =
[[NSURLConnection alloc] initWithRequest:request delegate:self];
}
我真的很难找到解决方案。这是一个错误,或者我的代码中的错误。是否有其他替代方法
答案 0 :(得分:4)
-[NSString stringByAddingPercentEscapesUsingEncoding:]
不应用于编码参数值。它会使某些特殊字符(+,&等)未编码(因为如果您编码URL,它们应该是这样)。
使用以下内容:
NSString *escapedParameter = [(NSString*)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)unescapedParameter, NULL, CFSTR("?=&+"), kCFStringEncodingUTF8) autorelease];
不如stringByAddingPercentEscapesUsingEncoding:
那么漂亮,但您可以轻松为此制作宏。
http://arstechnica.com/apple/news/2009/01/iphone-dev-building-proper-mailto-urls.ars是在1月份写的,当时我发现了构建mailto:URL的类似问题,要发送到-[UIApplication openURL:]
。
N.B。欢迎来到Stack Overflow!不要忘记阅读FAQ并为您的问题标记已接受的答案(当然,如果它们是值得接受的好答案)。