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

如何在Swift中对指定URL执行特定规则的编码?

嘿,在Swift里实现你要的URL编码需求,有两种实用的方法,我给你详细拆解下:

方法一:手动字符串替换(精准匹配你的规则)

如果你只需要替换指定的三个字符(=→%3D,&→%26,@→%40),直接用Swift的字符串替换方法就可以快速搞定,完全贴合你的需求:

let originalURLString = "http://api.theahsanzaman.info/token?username=haris123@gmail.com&password=Haris@123&grant_type=password"
// 按顺序替换目标字符
let encodedURLString = originalURLString
    .replacingOccurrences(of: "=", with: "%3D")
    .replacingOccurrences(of: "&", with: "%26")
    .replacingOccurrences(of: "@", with: "%40")

print(encodedURLString)
// 输出结果正好是你想要的:
// http://api.theahsanzaman.info/token?username%3Dharis123%40gmail.com%26password%3DHaris%40123%26grant_type%3Dpassword

优点:逻辑简单直接,完全按照你指定的规则执行,没有额外的隐式处理;
缺点:如果后续需要编码其他特殊字符(比如空格、!、$等),得手动添加更多替换规则,扩展性较差。

方法二:结合系统URL编码API(更健壮)

如果你的场景可能涉及更多特殊字符,或者想遵循标准的URL编码规范,推荐用Swift自带的URLComponents和addingPercentEncodingAPI,再补充你需要的特殊替换:

系统默认会编码URL参数里的特殊字符(比如@),但不会编码作为分隔符的=和&,所以我们可以先让系统处理常规编码,再手动替换=和&:

// 拆分基础URL和参数,更易维护
let baseURL = "http://api.theahsanzaman.info/token"
let parameters: [String: String] = [
    "username": "haris123@gmail.com",
    "password": "Haris@123",
    "grant_type": "password"
]

// 1. 构建编码后的查询参数项
var queryItems = [URLQueryItem]()
for (key, value) in parameters {
    // 对参数值做标准URL编码
    let encodedValue = value.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
    queryItems.append(URLQueryItem(name: key, value: encodedValue))
}

// 2. 组装URL组件
var urlComponents = URLComponents(string: baseURL)
urlComponents?.queryItems = queryItems

// 3. 手动替换=和&为目标编码
if var query = urlComponents?.query {
    query = query
        .replacingOccurrences(of: "=", with: "%3D")
        .replacingOccurrences(of: "&", with: "%26")
    urlComponents?.query = query
    
    // 最终得到你想要的编码URL
    if let finalEncodedURLString = urlComponents?.string {
        print(finalEncodedURLString)
    }
}

优点:系统API自动处理大部分特殊字符的编码,避免遗漏;参数拆分的写法更易维护,后续修改参数更方便;
缺点:比手动替换多了几步组装URL组件的操作,但整体复杂度不高。


内容的提问来源于stack exchange,提问作者Hamza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:25:17