获取 URL 里的参数,转换为字典 并提取出来

不羁岁月 提交于 2019-12-06 11:29:20

例子:https://xxxxxx/?team_id=5d5e077fce6d2a62177da413&account_id=5d665417ce6d2a4c759ab835

思考:现在怎么样从这串链接里获取 team_id 和 account_id 这两个参数和值呢?

第一步:先通过 ? 号 把参数和基础连接分开成一个数组: NSArray *arr = [paramURL componentsSeparatedByString:@“?”]; 结果: po arr [ "https://boss-api-dev.aoaosong.com:9040/app-qrcode/", "team_id=5d5e077fce6d2a62177da413&account_id=5d665417ce6d2a4c759ab835" ]

第二步:判断分割的数组是否大于等于二,确保里面有参数。 然后从 arr[1] 里面有参数的字符串里 去通过 & 分割字符,把参数放到一个数组里。 if (arr.count>=2) { // 截取参数数组 NSArray *params = [arr[1] componentsSeparatedByString:@“&”]; 结果: po params [ "team_id=5d5e077fce6d2a62177da413", "account_id=5d665417ce6d2a4c759ab835" ]

第三步:再再通过遍历params,把遇到 = 号的 分割成一个数组,结果: po param [ "team_id", "5d5e077fce6d2a62177da413" ]

第四步:设置索引0为 key , 1 为 value,存放在可变字典里返回:

if (arr.count>=2) { // 截取参数数组 NSArray *params = [arr[1] componentsSeparatedByString:@"&"]; // 用于存放参数的键和值 NSArray *param = [NSArray array]; for (int i = 0; i<params.count; i++) { param = [params[i] componentsSeparatedByString:@"="]; if (param.count >= 2) { [paramInfo setValue:param[1] forKey:param[0]]; } } } // 现在paramInfo字典里存放的都是参数的键值对了 return paramInfo;

第五(扩展):根据实际需求考虑一些特殊情况,比如包含汉字要先进行编解码。参数里包含URL的时候要处理:

if ([paramURL containsString:@"%"]) {
    paramURL = [paramURL stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
}


NSMutableDictionary * paramInfo = [NSMutableDictionary dictionary];
// ITBoy://test?title=test&username=lisi&url=http://www.baidu.com?userid=110
// 参数如果包含url
if ([paramURL containsString:@"url="]) {
    // 获取要截取的字符串位置
    NSRange range = [paramURL rangeOfString:@"url="];
    // 截取参数里url部分
    NSString * paramsStr= [paramURL substringFromIndex:range.location];
    NSArray * param = [paramsStr componentsSeparatedByString:@"="];
    if (param.count>=2) {
        [paramInfo setValue:param[1] forKey:param[0]];
    }
    // ITBoy://test?title=test&username=lisi
    paramURL = [paramURL substringToIndex:range.location-1];
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!