我应该使用CharacterSet还是URLQueryItem?

时间:2018-01-22 09:03:34

标签: ios swift url nsurlrequest

尝试调用内部有一些特殊字符的url字符串请求时遇到了一些问题。例如,对于CharacterSet,当在URL中有%20表示空格键时,我使用addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)函数将其替换为%2520。你们可以尝试这段代码:

    let url = "http://analytics.abc.io/acct?start_date=2017-11-15&aff=ABC%20Telecom"
    url.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
    print(URL(string: url.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)!)

实际上它的请求是成功的,但响应数据是错误的。任何人都可以给我一些想法以及如何解决这个问题。

除此之外,请给我一些关于我不使用它的URLQueryItem的评论,所以我需要你的帮助。谢天谢地!

4 个答案:

答案 0 :(得分:6)

老实说,如果使用URLComponents进行分解,它会好100%。它将为您和下一个开发人员阅读代码提供便利。

let host = "analytics.abc.io"
let scheme = "http"
let path = "/acct"
var urlQueryItems : [URLQueryItem] = []
for (key, value) in [("start_date", "2017-11-15"), ("aff", "ABC Telecom")] {
    urlQueryItems.append(URLQueryItem(name: key, value: value))
}

var result = URLComponents()
result.host = host
result.scheme = scheme
result.path = path
result.queryItems = urlQueryItems

print(result.url)
//prints : Optional(http://analytics.abc.io/acct?start_date=2017-11-15&aff=ABC%20Telecom)

答案 1 :(得分:1)

请改变下面的行

(url.addingPercentEncoding( withAllowedCharacters: .urlUserAllowed))!

希望它有所帮助。

答案 2 :(得分:1)

我遇到了同样的问题,我解决了使用followint技巧

let url = "http://analytics.abc.io/acct?start_date=2017-11-15&aff=ABC%20Telecom"
    if url.contains(" ") {
            url = urlSTR.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
        }

有时我们已经从服务器编码了url然后它会产生一些问题。所以最好的解决方案是让你的服务器人员提供没有编码的url并从app端管理它。 希望它有所帮助。

答案 3 :(得分:1)

请勿强行打开任何内容,请使用if..letguard

let url = "http://analytics.abc.io/acct?start_date=2017-11-15&aff=ABC%20Telecom"

if let finalURL = url.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) {
    //Do your stuff
}