Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将字符串转换为包含URL的URL?通过Swift 4.2在字符串中_Swift_Swift4 - Fatal编程技术网

如何将字符串转换为包含URL的URL?通过Swift 4.2在字符串中

如何将字符串转换为包含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

作为标题,我正在使用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)")

您应该只对查询参数进行编码(虽然可能只有
关键字
实际需要编码),而不是对整个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字符,我也可以使用这个方法吗?