2

我正在使用Google 自定义搜索引擎编写应用程序。

我收到了我的搜索引擎 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 APIs explorer 时得到的这个值,它显示了使用的 urldress)。它没有这样做。我在没有转义的情况下获取 url,没有任何变化。如果我在此映射中使用转义字符串作为引擎 ID,我将得到转义字符串XXXXXXXX21914382657 1%253A 7h9XXXXXXX(查询中添加了额外的“25”)。

有人可以告诉我如何解决吗?我不想使用 String 然后将其转换为 URL by NSURL(string: str)!。它并不优雅。

编辑:

我正在使用应用程序 Info.plist 来保存 ID,并通过调用来检索它:

String(NSBundle.mainBundle().objectForInfoDictionaryKey("ApiKey")!)
4

1 回答 1

1

URL 字符串的查询部分允许使用冒号。应该没有必要逃避它们。

严格来说,在 URL 的那一部分中绝对必须编码的唯一内容是和号、井号 (#) 和(假设您正在使用表单编码进行 GET 查询)等号。但是,理论上问号可能会导致问题,斜杠在技术上是不允许的(但工作得很好),分号在技术上是允许的(但同样,在实践中工作)。

冒号,AFAIK,仅在路径上下文中具有特殊含义(如果操作系统将其视为路径分隔符),并且它将方案(协议)与 URL 的其余部分分开。

所以不要担心冒号被未编码,除非谷歌 API 出于某种原因而出错。

于 2016-09-09T00:09:58.193 回答