2016-09-03 7 views
2

Ich schreibe App mit Google custom search engine.Falsche NSURLQueryItem Prozentsatz Codierung für Google CSE

erhielt ich meine Suchmaschine ID XXXXXXXX21914382657 1: 7 h9XXXXXXX (interessanteste Teil fett).

Jetzt versuche ich NSURLQueryItem zu verwenden, um meine ID in URL eingebettet werden unter Verwendung:

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

Es sollte Prozentsatz Fluchtpunkt zu XXXXXXXX21914382657 1% 3A 7h9XXXXXXX (Dieser Wert Ich erhalte Wenn Sie den Google APIs Explorer während des Tests verwenden, wird die verwendete URL angezeigt. Es tut es nicht. Ich bekomme URL ohne zu entkommen, keine Änderungen. Wenn ich eine Escapezeichenfolge als Engine-ID in diesem Mapping verwende, erhalte ich die Escapezeichenfolge XXXXXXXX21914382657 1% 253A 7h9XXXXXXX (zusätzliche '25' wird zur Abfrage hinzugefügt).

Kann mir jemand sagen, wie ich es beheben kann? Ich möchte String nicht verwenden und dann durch NSURL(string: str)! in URL umwandeln. Es ist nicht elegant.

Edit:

I App Info.plist bin mit ID zu speichern und ich abrufen es durch den Aufruf:

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

Antwort

1

Colons sind erlaubt in der Abfrage Teil einer URL-Zeichenfolge. Es sollte nicht nötig sein, ihnen zu entkommen.

Streng genommen sind die einzigen Dinge, die unbedingt in diesem Teil einer URL codiert werden müssen, Ampersands, Hash-Zeichen (#) und (vorausgesetzt, Sie führen eine GET-Abfrage mit Formularcodierung) Gleichheitszeichen. Theoretische Fragezeichen können jedoch Probleme verursachen, Schrägstriche sind technisch nicht erlaubt (funktionieren aber gut) und Semikolons sind technisch erlaubt (aber auch in der Praxis).

Doppelpunkte, AFAIK, haben im Kontext von Pfaden (wenn das Betriebssystem sie als Pfadtrennzeichen behandelt) nur eine besondere Bedeutung und trennen das Schema (Protokoll) vom Rest der URL.

Sorgen Sie sich also nicht darum, dass der Doppelpunkt nicht codiert ist, es sei denn, die Google API rappt aus irgendeinem Grund.

Verwandte Themen