首页 > 解决方案 > 如何将字符串转换为包含 ? 在 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)")

标签: swiftswift4

解决方案


您应该只编码查询参数(尽管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 - 对 URL进行编码以了解对 URL 参数进行编码的正确方法。


推荐阅读