iOS URL处理

今天讲三个关于 URL 处理的小技巧

  • URL中含有中文导致无法解析怎么办
  • URL中文乱码如何处理
  • URL如何解析参数

URL中含有中文导致无法解析怎么办

URL中含有中文,用的时候会报错,即URL不支持,此时我们需要进行转码。

NSString *url = @"https://25.1.12.89//oobe/联想小微云用户批量导入模板.xls";
url = [url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSLog(@"%@",url);

此时我们可以打印下url的值:

2021-06-03 18:38:34.732662+0800 iOSDemo[1299:40081] https://25.1.12.89//oobe/%E8%81%94%E6%83%B3%E5%B0%8F%E5%BE%AE%E4%BA%91%E7%94%A8%E6%88%B7%E6%89%B9%E9%87%8F%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xls

通过这样的转换,URL就可以被正常解析了。

URL中文乱码如何处理

通过上一步的操作URL就乱码了,此时我们如何得到正确的中文呢?

NSString *url = @"https://25.1.12.89//oobe/%E8%81%94%E6%83%B3%E5%B0%8F%E5%BE%AE%E4%BA%91%E7%94%A8%E6%88%B7%E6%89%B9%E9%87%8F%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xls";
url = [url stringByRemovingPercentEncoding];
NSLog(@"url:%@",url);

我们来看下打印结果:

2021-06-03 18:46:48.927981+0800 iOSDemo[1408:43997] url:https://25.1.12.89//oobe/联想小微云用户批量导入模板.xls

URL如何解析参数

URL中地址跟参数用“?”连接,前面是地址,后面是参数;参数与参数之间用“&”连接;参数是一个个键值对,键与值通过“=”分割。
下面分享我转换参数键值对的代码,即传一个URL,得到一个包含URL中所有参数的字典。

Objective-C版
-(NSDictionary *)getParaFromURLString:(NSString *)url{
    //中文解码
    NSString *urlStr = [url stringByRemovingPercentEncoding];
    NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
    NSArray *array = [urlStr componentsSeparatedByString:@"?"];
    if (array.count == 2) {
        NSString *parameterStr = array[1];
        NSArray *paraArr = [parameterStr componentsSeparatedByString:@"&"];
        for (NSString *string in paraArr) {
            NSArray *paraArr = [string componentsSeparatedByString:@"="];
            [dic setValue:paraArr[1] forKey:paraArr[0]];
        }
    }
    return dic;
}
Swift版
func getUrlParameters(url:String) -> [String: String]? {
    //中文解码
    guard let urlStr = url.removingPercentEncoding else {
        return nil
    }
    var params: [String: String] = [:]
    let array = urlStr.components(separatedBy: "?")
    if array.count == 2 {
        let paramsStr = array[1]
        if paramsStr.count > 0 {
            let paramsArray = paramsStr.components(separatedBy: "&")
            for param in paramsArray {
                let arr = param.components(separatedBy: "=")
                if arr.count == 2 {
                    params[arr[0]] = arr[1]
                }
            }
        }
    }
    return params
}

你可能感兴趣的:(iOS URL处理)