【问题标题】:Wrong NSURLQueryItem percentage encoding for Google CSEGoogle CSE 的错误 NSURLQueryItem 百分比编码
【发布时间】:2016-09-03 08:26:45
【问题描述】:

我正在使用Google custom search engine 编写应用程序。

我收到了我的搜索引擎 ID XXXXXXXX219143826571:7h9XXXXXXX(最有趣的部分加粗)。

现在我正在尝试使用 NSURLQueryItem 将我的 ID 嵌入到 URL 中:

let params = ["cx" : engineID,...]
...
components.queryItems = parameters.map {
    NSURLQueryItem(name: String($0), value: String($1))
}

它应该将转义项百分比设置为 XXXXXXXX219143826571%3A7h9XXXXXXX(我在测试时使用 Google APIs explorer 时得到的这个值,它显示了使用的 urldress )。它没有这样做。我在没有转义的情况下获取 url,没有任何变化。如果我在此映射中使用转义字符串作为引擎 ID,我将得到转义字符串 XXXXXXXX219143826571%253A7h9XXXXXXX(查询中添加了额外的 '25')。 p>

谁能告诉我如何解决它?我不想使用String,然后通过NSURL(string: str)! 将其转换为URL。不优雅。

编辑:

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

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

【问题讨论】:

    标签: swift nsurlrequest percent-encoding


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-05-21
      • 1970-01-01
      • 2014-06-03
      • 2017-03-09
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多