2016-09-03 2 views
2

私はGoogle custom search engineを使用してアプリを書いています。Google CSEで間違ったNSURLQueryItemのエンコード率

私は、検索エンジンID XXXXXXXX21914382657 1受信:7 h9XXXXXXX(最も興味深い部分太字)。

今、私が使用してURLに私のIDを埋め込むことNSURLQueryItemを使用しようとしている:

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

それはすべき割合エスケープ項目をXXXXXXXX21914382657 1%3A 7h9XXXXXXX私は取得しています(この値にテスト中にGoogle APIエクスプローラを使用すると、使用されたURLドレスが表示されます)。それはやっていない。エスケープせずにURLを取得していますが、変更はありません。このマッピングでエスケープされた文字列をエンジンIDとして使用すると、エスケープ文字列XXXXXXXX21914382657 1%253A 7h9XXXXXXX(クエリに「25」が追加されています)が表示されます。

誰かに修正方法を教えてもらえますか? Stringを使用してURLに変換するのは、NSURL(string: str)!ではありません。エレガントではありません。

編集:

私はIDを保存するために、アプリのInfo.plistを使用していると私は呼び出すことによってそれを取得:

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

答えて

1

コロンているが、URL文字列のクエリの一部にできます。エスケープする必要はありません。

厳密に言えば、URLのその部分に絶対にエンコードする必要があるのはアンパサンド、ハッシュマーク(#)、(フォームエンコードでGETクエリを実行していると仮定すると)サインと同じです。しかし、理論上の疑問符は問題を引き起こす可能性があり、スラッシュは技術的に許可されていませんが、うまく機能しますし、技術的にセミコロンも許可されます(実際には動作します)。

コロン(AFAIK)は、パスのコンテキスト(OSがパス区切り文字として扱う場合)でのみ意味を持ち、残りのURLからスキーム(プロトコル)を分離します。

Google APIが何らかの理由で禁止されていない限り、コロンがコード化されていないか心配しないでください。

関連する問題