我在URL q=Yellowstone+national+park
中有一个查询项。当使用URLComponents
通过以下代码解码和提取查询值时,我得到的是Yellowstone+national+park
而不是Yellowstone national park
。
let someURL = URL(string: "https://www.example.com/?q=Yellowstone+national+park")!
let components = URLComponents(url: someURL, resolvingAgainstBaseURL: true)
let keyword = components?.queryItems?.first(where: { (queryItem) -> Bool in
return queryItem.name == "q"
})?.value ?? "Keyword is empty"
我发现URLComponents
可以很好地用于百分比编码查询:
q=%E8%BF%87%E5%B1%B1%E8%BD%A6
->过山车
q=Yellowstone+national+park
->Yellowstone+national+park
反正URLComponents
是否可以自动将+
转换为空格?谢谢!
答案 0 :(得分:1)
您可以执行简单的替换操作
let keyword = components?.queryItems?.first(where: { (queryItem) -> Bool in
return queryItem.name == "q"
})?.value?.replacingOccurrences(of: "+", with: " ") ?? "Keyword is empty"
答案 1 :(得分:-1)
来自Apple文档:
RFC 3986指定必须在字符中对哪些字符进行百分比编码 URL的查询组成部分,而不是这些字符应如何组成 解释。分隔键值对的使用很常见 约定,但未通过规范进行标准化。因此,你 与其他实现可能会遇到互操作性问题 遵循这个约定。
潜在的互操作性问题的一个著名例子是 加号(+)字符被处理:
根据RFC 3986,加号是在 查询,并且不需要进行百分比编码。但是,根据 W3C关于URI寻址的建议,加号保留 作为查询字符串中空格的简写形式(例如, ?greeting = hello + world)。
如果URL查询组件包含根据RFC格式化的日期 3339,时区偏移量中带有加号(例如, 2013-12-31T14:00:00 + 00:00),将加号解释为空格 导致无效的时间格式。 RFC 3339指定日期应如何 格式化,但不建议是否必须加号 网址中的百分比编码。 取决于实施情况 此网址,您可能需要先对加号进行百分比编码 字符。
不知道拒绝答案的原因:
此处描述的类似问题:fetch_all()