Như @Krumelur đề nghị, Chức năng CFURLCreateStringByAddingPercentEscapes
thể URL mã hóa chuỗi cho bạn. Và đây là mã.
static NSString * CTPercentEscapedQueryStringValueFromStringWithEncoding(NSString *string, NSStringEncoding encoding) {
return (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)string, NULL, (__bridge CFStringRef)kCharactersToBeEscapedInQueryString, CFStringConvertNSStringEncodingToEncoding(encoding));
}
Và Hoàn thành giải pháp : Để mã hóa url từ các thông số sử dụng dưới mã.
/**
get parameterized url from url and query parameters.
*/
+(NSString *)getParameterizedUrl:(NSString *)url withParameters:(NSDictionary *)queryDictionary
{
NSMutableArray *mutablePairs = [NSMutableArray array];
for (NSString *key in queryDictionary) {
[mutablePairs addObject:[NSString stringWithFormat:@"%@=%@", CTPercentEscapedQueryStringKeyFromStringWithEncoding(key, NSUTF8StringEncoding), CTPercentEscapedQueryStringValueFromStringWithEncoding(queryDictionary[key], NSUTF8StringEncoding)]];
}
return [[NSString alloc]initWithFormat:@"%@?%@",url,[mutablePairs componentsJoinedByString:@"&"]];
}
static NSString * const kCharactersToBeEscapedInQueryString = @":/?&=;[email protected]#$()',*";
static NSString * CTPercentEscapedQueryStringKeyFromStringWithEncoding(NSString *string, NSStringEncoding encoding) {
static NSString * const kCharactersToLeaveUnescapedInQueryStringPairKey = @"[].";
return (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)string, (__bridge CFStringRef)kCharactersToLeaveUnescapedInQueryStringPairKey, (__bridge CFStringRef)kCharactersToBeEscapedInQueryString, CFStringConvertNSStringEncodingToEncoding(encoding));
}
static NSString * CTPercentEscapedQueryStringValueFromStringWithEncoding(NSString *string, NSStringEncoding encoding) {
return (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)string, NULL, (__bridge CFStringRef)kCharactersToBeEscapedInQueryString, CFStringConvertNSStringEncodingToEncoding(encoding));
}
Và sử dụng trong mã của bạn như
NSString *url = [self getParameterizedUrl:@"http://www.example.com" withParameters:self.params];
Lưu ý: params ở đây là từ điển.
Nguồn
2015-06-29 10:33:55
Tôi cần mã hóa x-www-form-urlencoded? Điều này có giống nhau không? Tôi sẽ cố gắng và cho bạn biết – user960567
Không nhất thiết, nếu bạn cần các đối tượng mã hóa biểu mẫu (ví dụ: các mảng, từ điển và không có gì), bạn cũng cần phải mã hóa chúng dưới dạng cặp khóa-giá trị. Đối với các chuỗi đơn giản, việc thoát là đủ. – Krumelur
Đây không phải là JSON đơn giản. Nó đến từ phần thứ ba. Tôi cần mã hóa chính xác mã này dưới dạng x-www-form-urlencoded – user960567