我今天遇到了一个恼人的问题。我正在做一个查询自制API并解析答案的应用程序,这是一个非常经典的答案。
但是由于我收到了大量数据,我想应用过滤器"< ="和"> ="根据我的要求,它不起作用。生成的URL对象为nil
。
以下是代码:
print(request.url) // prints the expected URL
var uerel = URL(string: request.url)
print(uerel) // prints 'nil'
输出:
https://XXXXXXX.eu/YYYYYY?my_filter_id=5b057e27443318329d694d64&date>=2016-01-01T08:00:00.000Z&date<=2016-01-01T20:00:00.000Z
nil
有趣的是,如果我删除<
和>
,它就会像魅力一样。
我尝试在official doc for URL object中搜索,但它似乎不需要特殊编码..?
我还看了上述官方文档中提到的RFC 1808,这些特殊字符标记为punctuation
,所以我相信可以将它们放在URL中。
问题出在哪里?
答案 0 :(得分:5)
您需要对该网址进行编码,因为<
中的>
和URL
符号无效。
let unencodedUrlString = "https://XXXXXXX.eu/YYYYYY?my_filter_id=5b057e27443318329d694d64&date>=2016-01-01T08:00:00.000Z&date<=2016-01-01T20:00:00.000Z"
guard let encodedUrlString = unencodedUrlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed), let url = URL(string: encodedUrlString) else { return }
如您所见,编码后的网址不会包含<
和>
符号: