iOS Objective-C(Xcode 8.3)URL解码问题:请求解码指定URL字符串
在Xcode8.3的Objective-C中解码URL字符串
嘿,我来帮你搞定这个URL解码的问题!你给的这个URL字符串有点特殊——既有URL标准的转义字符(比如%2C、%20),还有HTML转义的&符号,得分两步处理才能得到可读的内容。
第一步:先处理HTML转义字符
你的URL里的&是HTML的转义格式,对应正常的&符号,得先把它替换掉,不然后续的URL解码会出问题:
NSString *originalURLString = @"http://www.ios=multiPointShow?sourceApplication=from_wb&dev=0&q=32.269951%2C119.177404%2Chotel+168%E9%85%92%E5%BA%97%2C%E5%A4%A7%E5%BA%86%E8%B7%AF200%E5%8F%B7%28%E8%A7%A3%E6%94%BE%E8%A5%BF%E8%B7%AF%E4%B8%8E%E5%A4%A7%E5%BA%86%E5%8C%97%E8%B7%AF%E4%BA%A4%E6%B1%87%E5%8F%A3%29%2CB02020JATI%2C&title=Hotel+168%E9%85%92%E5%BA%97&android=androidamap?action=shorturl&p=B02020JATI,32.269951,119.177404,Hot..."; // 把HTML转义的&替换成正常的& NSString *cleanedString = [originalURLString stringByReplacingOccurrencesOfString:@"&" withString:@"&"];
第二步:进行URL转义解码
接下来处理URL里的转义字符,这里要注意一个细节:URL里的+符号代表空格,但系统默认的stringByRemovingPercentEncoding方法不会处理它,所以得先把+替换成%20,再执行解码:
// 先替换+为%20,确保空格能被正确解码 NSString *stringWithPlusFixed = [cleanedString stringByReplacingOccurrencesOfString:@"+" withString:@"%20"]; // 解码所有URL转义字符 NSString *decodedURLString = [stringWithPlusFixed stringByRemovingPercentEncoding];
进阶:精准处理单个查询参数
如果你只需要解码URL里的某个查询参数(比如q、title),用NSURLComponents拆分URL后逐个处理会更灵活,避免整个URL解码可能出现的异常:
NSURLComponents *urlComponents = [NSURLComponents componentsWithString:cleanedString]; for (NSURLQueryItem *queryItem in urlComponents.queryItems) { // 处理每个参数里的+和转义字符 NSString *decodedValue = [queryItem.value stringByReplacingOccurrencesOfString:@"+" withString:@"%20"]; decodedValue = [decodedValue stringByRemovingPercentEncoding]; NSLog(@"参数「%@」的解码值:%@", queryItem.name, decodedValue); }
运行这段代码后,你就能看到q参数被解码成32.269951,119.177404,Hotel 168酒店,大庆路200号(解放西路与大庆北路交叉口),B02020JATI,这样的可读内容啦。
内容的提问来源于stack exchange,提问作者damu
相关产品推荐
相关产品推荐

