Swift 将加号(+;)解码为URL组件中的空格
我在URL中有一个查询项:Swift 将加号(+;)解码为URL组件中的空格,swift,foundation,Swift,Foundation,我在URL中有一个查询项:q=Yellowstone+national+park。使用URLComponents解码并提取查询值时,我得到的是Yellowstone+国家+公园,而不是黄石国家公园 let someURL = URL(string: "https://www.example.com/?q=Yellowstone+national+park")! let components = URLComponents(url: someURL, resolvingAgainstBaseURL
q=Yellowstone+national+park
。使用URLComponents
解码并提取查询值时,我得到的是Yellowstone+国家+公园
,而不是黄石国家公园
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+国家+公园
-->Yellowstone+国家+公园
是否有url组件可以自动将+
转换为空格
?谢谢 来自苹果文档:
RFC 3986指定哪些字符必须在
URL的查询组件,但不包括这些字符应如何显示
解释。使用分隔键-值对是一种常见的方法
约定,但未通过规范进行标准化。所以你
可能会遇到与其他实现的互操作性问题
按照这个惯例
潜在互操作性问题的一个显著例子是
处理加号(+)字符:
根据RFC 3986,加号是一个字符中的有效字符
查询,不需要进行百分比编码。但是根据
W3C关于URI寻址的建议中,加号是保留的
作为查询字符串中空格的简写符号(例如,
问候语=你好+世界)
如果URL查询组件包含根据RFC格式化的日期
3339,时区偏移中带有加号(例如,
2013-12-31T14:00:00+00:00),将加号解释为空格
导致时间格式无效。RFC 3339规定了日期的显示方式
已格式化,但不建议加号是否必须为
URL中编码的百分比取决于接收的实现
对于此URL,您可能需要先对加号进行百分比编码
字符。
不知道投票否决的原因答案:
此处描述的类似问题:来自苹果文档:
RFC 3986指定哪些字符必须在
URL的查询组件,但不包括这些字符应如何显示
解释。使用分隔键-值对是一种常见的方法
约定,但未通过规范进行标准化。所以你
可能会遇到与其他实现的互操作性问题
按照这个惯例
潜在互操作性问题的一个显著例子是
处理加号(+)字符:
根据RFC 3986,加号是一个字符中的有效字符
查询,不需要进行百分比编码。但是根据
W3C关于URI寻址的建议中,加号是保留的
作为查询字符串中空格的简写符号(例如,
问候语=你好+世界)
如果URL查询组件包含根据RFC格式化的日期
3339,时区偏移中带有加号(例如,
2013-12-31T14:00:00+00:00),将加号解释为空格
导致时间格式无效。RFC 3339规定了日期的显示方式
已格式化,但不建议加号是否必须为
URL中编码的百分比取决于接收的实现
对于此URL,您可能需要先对加号进行百分比编码
字符。
不知道投票否决的原因答案:
此处描述的类似问题:您可以执行简单的替换操作
let keyword = components?.queryItems?.first(where: { (queryItem) -> Bool in
return queryItem.name == "q"
})?.value?.replacingOccurrences(of: "+", with: " ") ?? "Keyword is empty"
你可以做一个简单的替换操作
let keyword = components?.queryItems?.first(where: { (queryItem) -> Bool in
return queryItem.name == "q"
})?.value?.replacingOccurrences(of: "+", with: " ") ?? "Keyword is empty"