ios - 当查询参数包含&符号时编码 NSURL

标签 ios objective-c utf-8 nsurl

我正在调用 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.percentEncodedQueryterm 元素使用了我放在它上面的编码,而 apple 没有碰它。

希望这对其他人有帮助。

关于ios - 当查询参数包含&符号时编码 NSURL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23551199/

相关文章:

iOS ABPersonViewController

ios - Xcode 10.2.1 和 iOS 12.3 测试版

ios - 我的 m3u8 带宽值有问题

Android 应用程序编码问题 - 无法正确显示 ÅÄÖ

ios - 相对于手指拖动 UIVIew

ios - View Controller Transition 动画 subview 位置

iphone - 如何从ios中的自定义UIDatePicker获取正确的时间

objective-c - 如何将符合协议(protocol)的类声明为参数类型?

css - 特殊字符无法正确显示(CSS 文件、UTF-8)

java - "Unmappable character for encoding UTF-8"错误