我正在使用Google custom search engine撰写应用。
我收到了我的搜索引擎ID XXXXXXXX21914382657 1:7 h9XXXXXXX (最有趣的部分是粗体)。
现在我正在尝试使用NSURLQueryItem通过使用以下方法将我的ID嵌入到URL中:
let params = ["cx" : engineID,...]
...
components.queryItems = parameters.map {
NSURLQueryItem(name: String($0), value: String($1))
}
它应该是百分比转义项 XXXXXXXX21914382657 1%3A 7h9XXXXXXX (这个值是我在测试时使用Google API资源管理器时得到的,它显示了使用的网址连衣裙)。它不是这样做的。我没有逃脱,没有变化的网址。如果我在此映射中使用转义字符串作为引擎ID,我将获得转义字符串 XXXXXXXX21914382657 1%253A 7h9XXXXXXX (在查询中添加了额外的“25”)。
有人可以告诉我如何解决它吗?我不想使用String,然后通过NSURL(string: str)!
将其转换为URL。它不优雅。
编辑:
我正在使用app Info.plist来保存ID,我通过调用它来检索它:
String(NSBundle.mainBundle().objectForInfoDictionaryKey("ApiKey")!)
答案 0 :(得分:1)
冒号是允许在URL字符串的查询部分。应该没有必要逃脱它们。
严格地说,在URL的那一部分中唯一必须编码的是&符号,哈希标记(#)和(假设您正在使用表单编码进行GET查询)等于符号。然而,理论上的问号可能会引起问题,技术上不允许斜线(但工作得很好),技术上允许使用分号(但在实践中也是如此)。
Colons,AFAIK,在路径上下文中只有特殊含义(如果操作系统将其视为路径分隔符),并且它将方案(协议)与URL的其余部分分开。
所以不要担心冒号会被解除编码,除非谷歌API因为某些原因而被禁止。