本文主要是介绍NSURLSession POST请求 HTTPBody 组装时字符串中特殊字符的处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在组装HTTPBody时,若不对字符串中特殊字符进行处理,提交到服务器后的值会和预想的不同 。JavaScript中自带这样的字符串处理函数,其实oc中也有,在NSObject类中,是一个C函数,不过不是专门针对字符串,可以对很多对象进行数据转换处理,这里用作字符串处理,可以实现JavaScript中encodeURIComponent()函数的效果。
更多关于CFBridgingRelease()函数的详情,可以参考这篇博客:http://blog.sina.com.cn/s/blog_7ea0400d0102v7cj.html
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:address]];request.HTTPMethod = @"POST";request.HTTPBody = [[self paramStringFromParams:params] dataUsingEncoding:NSUTF8StringEncoding];
- (NSString *)paramStringFromParams:(NSDictionary *)params{NSMutableString *returnValue = [[NSMutableString alloc]initWithCapacity:0];NSArray *paramsAllKeys = [params allKeys];for(int i = 0;i < paramsAllKeys.count;i++){/*在此进行处理*/[returnValue appendFormat:@"%@=%@",[paramsAllKeys objectAtIndex:i],[self encodeURIComponent:[params objectForKey:[paramsAllKeys objectAtIndex:i]]]];if(i < paramsAllKeys.count - 1){[returnValue appendString:@"&"];}}return returnValue;
}
//特殊字符处理-(NSString*)encodeURIComponent:(NSString*)str{return CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL, (__bridge CFStringRef)str, NULL, (__bridge CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ", CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding)));
}
这篇关于NSURLSession POST请求 HTTPBody 组装时字符串中特殊字符的处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!