如何将字符串转换为包含 a 的 URL ?在字符串中 Swift 4.2
How can I convert the string to URL which include a ? in the string by Swift 4.2
如题,我用的是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(urlString)
if let encodedString = urlString.addingPercentEncoding(withAllowedCharacters: CharacterSet.alphanumerics
.union(CharacterSet.urlPathAllowed)
.union(CharacterSet.urlHostAllowed)) {
print("encodedString: \(encodedString)")
您应该只编码查询参数(虽然可能只有 keyword
实际上需要编码),而不是整个 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)
另请参阅 Swift - encode URL 了解 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!
如题,我用的是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(urlString)
if let encodedString = urlString.addingPercentEncoding(withAllowedCharacters: CharacterSet.alphanumerics
.union(CharacterSet.urlPathAllowed)
.union(CharacterSet.urlHostAllowed)) {
print("encodedString: \(encodedString)")
您应该只编码查询参数(虽然可能只有 keyword
实际上需要编码),而不是整个 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)
另请参阅 Swift - encode URL 了解 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!