我正在调用 API,有时我的查询参数包含一个 & 符号。例如,参数可能是 name=Billy & Bob
。
当我创建 url 时,我使用:
NSString *url = [NSString stringWithFormat:@"%@/search/%@?name=%@&page=%d", [Statics baseURL], user_id, [term urlEncodeUsingEncoding:NSUTF8StringEncoding], page];
NSURL *fullURL = [NSURL URLWithString:[url stringWithAccessToken]];
我用这种方法对 url 进行编码:
-(NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding {
return (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL,
(CFStringRef)self,
NULL,
(CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",
CFStringConvertNSStringEncodingToEncoding(encoding)));
}
问题是,& 符号通过 urlEncodeUsingEncoding
方法正确编码,然后 URLWithString
方法再次编码字符串并替换 %
符号在带有 %25
的字符串中创建。
有人知道如何对包含 & 符号的查询参数进行编码吗?
最佳答案
我找到了解决方案,它与 NSURLComponents
一起使用 - 此时在 iOS7 中添加了一个完全未记录的类。
NSURLComponents *components = [NSURLComponents new];
components.scheme = @"http";
components.host = @"myurl.com";
components.path = [NSString stringWithFormat:@"%@/mypath/%@", @"/mobile_dev/api", user_id];
components.percentEncodedQuery = [NSString stringWithFormat:@"name=%@", [term urlEncodeUsingEncoding:NSUTF8StringEncoding]];
NSURL *fullURL = [components URL];
通过使用 components.percentEncodedQuery
,term
元素使用了我放在它上面的编码,而 apple 没有碰它。
希望这对其他人有帮助。
关于ios - 当查询参数包含&符号时编码 NSURL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23551199/