应用过滤器"小于或等于"到URL

时间:2018-05-24 10:15:31

标签: ios swift

我今天遇到了一个恼人的问题。我正在做一个查询自制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中。

问题出在哪里?

1 个答案:

答案 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 }

如您所见,编码后的网址不会包含<>符号:

  

https://XXXXXXX.eu/YYYYYY?my_filter_id=5b057e27443318329d694d64&date%3E=2016-01-01T08:00:00.000Z&date%3C=2016-01-01T20:00:00.000Z