您的位置:首页 > 理论基础 > 计算机网络

NSURLSession POST请求HTTPBody组装时字符串中特殊字符的处理

2016-06-08 15:53 573 查看
在组装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)));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息