我应该使用 CharacterSet 还是 URLQueryItem?
Should I use CharacterSet or URLQueryItem?
当我尝试调用一个包含特殊字符的 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 的评论,我没有使用它,所以我需要你的帮助。感谢和加油!
请将您的线路更改为以下内容
(url.addingPercentEncoding( withAllowedCharacters: .urlUserAllowed))!
希望对您有所帮助。
我遇到了同样的问题,我使用跟随技巧解决了
let url = "http://analytics.abc.io/acct?start_date=2017-11-15&aff=ABC%20Telecom"
if url.contains(" ") {
url = urlSTR.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
}
有时我们得到 url 已经从服务器编码然后它创建一些 problem.so 最好的解决方案是让你的服务器人员提供 url 没有编码并从应用程序管理它结尾。
希望对你有帮助。
不要强行打开任何东西,使用if..let
或guard
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
}
老实说,如果使用 URLComponents 进行分解,会不会好 100%。方便你和下一个dev阅读代码的工作。
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)
当我尝试调用一个包含特殊字符的 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 的评论,我没有使用它,所以我需要你的帮助。感谢和加油!
请将您的线路更改为以下内容
(url.addingPercentEncoding( withAllowedCharacters: .urlUserAllowed))!
希望对您有所帮助。
我遇到了同样的问题,我使用跟随技巧解决了
let url = "http://analytics.abc.io/acct?start_date=2017-11-15&aff=ABC%20Telecom"
if url.contains(" ") {
url = urlSTR.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
}
有时我们得到 url 已经从服务器编码然后它创建一些 problem.so 最好的解决方案是让你的服务器人员提供 url 没有编码并从应用程序管理它结尾。 希望对你有帮助。
不要强行打开任何东西,使用if..let
或guard
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
}
老实说,如果使用 URLComponents 进行分解,会不会好 100%。方便你和下一个dev阅读代码的工作。
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)