Swift的URL appendPathComponent方法用%3F替换了?

17

我有一个路由器,其中包含以下行:

var url = URL(string: MyRouter.baseURLString)!

url.appendPathComponent(relativePath)

这将"?"替换为"%3F",但被API服务器拒绝。我该怎么办?将这个字符进行编码是错误的。


将“?”包含在路径组件中是错误的。它用作路径和查询之间的分隔符,因此如果您确实希望将其放在路径中,则需要进行百分比编码。如果您想创建带有查询的URL,例如https://example.com?name=value,可以尝试使用URLComponents或仅使用字符串连接。 - OOPer
我将其改为使用字符串连接。相对路径的形式为/search?since=1。 - markhorrocks
你成功了吗?如果你仍然遇到一些困难,请编辑你的问题并添加一些细节。 - OOPer
你需要创建一个URL字符串并设置URLEncoding,例如https://stackoverflow.com/a/51894621/3110023。 - iman
1个回答

18

因为 ? 不是路径的一部分,而是一个分隔符,用于标识查询字符串的开始。您可以在 这篇文章 中了解 URL 的不同组成部分。每个组件都有其一组有效字符,任何不在此集合中的字符都需要进行百分号编码转义。最好的选择是使用 URLComponents,它会自动处理转义:

var urlComponents = URLComponents(string: MyRouter.baseURLString)!
urlComponents.queryItems = [
    URLQueryItem(name: "username", value: "jsmith"),
    URLQueryItem(name: "password", value: "password")
]

let url = urlComponents.url!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接