iOS AFNetworking URL包含特殊字符处理

一:之前开发中,跟后台交互请求数据都放在body里面,直接将字典丢到AFNetworking的parameters参数里面就OK了。但是后面后台交互请求数据都放在header里面了,现在前端直接将参数放在parameters里面将会出现各种问题。需要将字典拼接成URL?key=value&key=value形式。此时,如果直接拼接使用的话,如果里面包含中文,则也会出错。

二:那么就需要对URL进行转译。之前的方法是

NSString* encodedString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

但是现在这个方法被弃用了,需要换成

  NSString *encodedString = [urlStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];

三:但是如果包含特殊字符的话,特殊字符会被转换成%234这样的字符串,又出问题了。此时又需要换一个方法。

- (NSString *)urlQueryStringWithDic:(NSDictionary *)dic {
 
    NSMutableString *string = [NSMutableString string];
    for (NSString *key in [dic allKeys]) {
        if ([string length]) {
            [string appendString:@"&"];
        }
        CFStringRef escaped = CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)[[dic objectForKey:key] description], NULL,(CFStringRef)@"!*'();:@&=+$,/?%#[]",kCFStringEncodingUTF8);
        [string appendFormat:@"%@=%@", key, escaped];
        CFRelease(escaped);
    }
    return string;
}

最后,吐槽一下,请求数据为啥不能老老实实的放在body里面。

你可能感兴趣的:(iOS AFNetworking URL包含特殊字符处理)