如何将字符串转换为包含URL的URL?通过Swift 4.2在字符串中
作为标题,我正在使用Google Places API,URL有一个问号,当我发送请求时,它将变成%3F,我如何通过Swift 4.2修改我的代码 我发现了很多信息,但他们使用的是Swift 2或3,所以我无法使用 更新我的代码如何将字符串转换为包含URL的URL?通过Swift 4.2在字符串中,swift,swift4,Swift,Swift4,作为标题,我正在使用Google Places API,URL有一个问号,当我发送请求时,它将变成%3F,我如何通过Swift 4.2修改我的代码 我发现了很多信息,但他们使用的是Swift 2或3,所以我无法使用 更新我的代码 let urlString = "\(GOOGLE_MAP_API_BASEURL)key=\(GMS_HTTP_KEY)&input=\(keyword)&sessiontoken=\(ver4uuid!)" print(urlStri
let urlString = "\(GOOGLE_MAP_API_BASEURL)key=\(GMS_HTTP_KEY)&input=\(keyword)&sessiontoken=\(ver4uuid!)"
print(urlString)
if let encodedString = urlString.addingPercentEncoding(withAllowedCharacters: CharacterSet.alphanumerics
.union(CharacterSet.urlPathAllowed)
.union(CharacterSet.urlHostAllowed)) {
print("encodedString: \(encodedString)")
您应该只对查询参数进行编码(虽然可能只有
关键字
实际需要编码),而不是对整个URL进行编码
func urlEncode(_ string: String) -> String {
var allowed = CharacterSet.urlQueryAllowed
allowed.remove(charactersIn: "!*'();:@&=+$,/?%#[]")
return string.addingPercentEncoding(withAllowedCharacters: allowed) ?? ""
)
let urlString = "\(GOOGLE_MAP_API_BASEURL)key=\(urlEncode(GMS_HTTP_KEY))&input=\(urlEncode(keyword))&sessiontoken=\(urlEncode(ver4uuid!))"
print(urlString)
另请参阅URL参数编码的正确方法。在这种情况下,我强烈建议使用
URLComponents
和URLQueryItem
,它们可以非常顺利地处理转义百分比
var urlComponents = URLComponents(string: GOOGLE_MAP_API_BASEURL)!
let queryItems = [URLQueryItem(name: "key", value: GMS_HTTP_KEY),
URLQueryItem(name: "input", value: keyword),
URLQueryItem(name: "sessiontoken", value: ver4uuid!)]
urlComponents.queryItems = queryItems
let url = urlComponents.url!
向我们展示您的代码,我们可以建议如何修复它。不过,URL编码的工作方式几乎没有任何变化。@Sulthan我已经更新了我的代码,谢谢!您应该只对关键字进行URL编码。没有其他东西需要编码。您不能对整个
urlString
进行编码。如果我有一个UTF8字符,我也可以使用这个方法吗?