IOS开发之CFURLCreateStringByAddingPercentEscapes--URL 编码


#define SINA_API_AUTHORIZE          @"https://api.weibo.com/oauth2/authorize"

#define SINA_APP_KEY                @"3456404324"


- (NSURL*)getOauthCodeUrl {                 //获取auth_code or access_token;留给webview

    //https://api.weibo.com/oauth2/authorize

    //https://api.weibo.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI

     NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:

  SINA_APP_KEY,                    @"client_id",       //申请的appkey

@"token",                        @"response_type",   //access_token

  @"http://hi.baidu.com/jt_one",   @"redirect_uri",    //申请时的重定向地址

  @"mobile",                       @"display",         //web页面的显示方式

                                         nil];

NSURL *url = [self generateURL:SINA_API_AUTHORIZE params:params];    //参数是可变个数的

NSLog(@"url= %@",url);

    return url;

}



- (NSURL *)generateURL:(NSString *)baseURL params:(NSDictionary *)params {

if (params) {

NSMutableArray *pairs = [NSMutableArray array];

for (NSString *key in params.keyEnumerator) {

NSString *value = [params objectForKey:key];

            //将要添加到URL的字符串进行特殊处理,如果这些字符串含有 & 这些特殊字符,用“%+ASCII” 代替

NSString *escaped_value = (NSString *)CFURLCreateStringByAddingPercentEscapes(

  NULL, /* allocator */

  (CFStringRef)value,

  NULL, /* charactersToLeaveUnescaped */

  (CFStringRef)@"!*'();:@&=+$,/?%#[]",

   kCFStringEncodingUTF8);

                [pairs addObject:[NSString stringWithFormat:@"%@=%@", key, value]];

[escaped_value release];

}

NSString *query = [pairs componentsJoinedByString:@"&"];

NSString *url = [NSString stringWithFormat:@"%@?%@", baseURL, query];

return [NSURL URLWithString:url];

} else {

return [NSURL URLWithString:baseURL];

}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值