今天讲三个关于 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
}