You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:25:11