stringByAddingPercentEncodingWithAllowedCharacters für query component?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • stringByAddingPercentEncodingWithAllowedCharacters für query component?

    Hallo,

    gibt es kein passendes NSCharacterset um einen teil einer query (zb den wert für einen key) korrekt zu encoden?

    es gibt ja folgende:

    URLUserAllowedCharacterSet
    URLPasswordAllowedCharacterSet
    URLHostAllowedCharacterSet
    URLPathAllowedCharacterSet
    URLQueryAllowedCharacterSet
    URLFragmentAllowedCharacterSet

    aber alle enthalten zb das ampersand "&" welches in einem query-wert ja auf keinen fall vorkommen darf!?
  • little_pixel schrieb:

    Hallo Gabriel,

    früher habe ich dafür eine eigene Methode gehabt, die die Pärchen zusammensetzt und den Wert mit CFURLCreateStringByAddingPercentEscapes kodiert.

    Aber es gibt ja jetzt NSURLQueryItem und damit ist das seitens Apple schon gelöst.

    Viele Grüße
    Hallo, das habe ich auch so gehandhabt, die funktion ist jetzt aber deprecated (10.11).
    NSURLQueryItem kann ich nicht verwenden weil 10.9 support sein MUSS (und NSURLQueryItem gibts erst ab 10.10).
  • Hab mir als übergang jetzt schnell eine CharSet-addition erstellt:

    Quellcode

    1. @interface NSCharacterSet (Additions)
    2. + (NSCharacterSet *)URLQueryComponentAllowedCharacterSet;
    3. @end
    4. @implementation NSCharacterSet (Additions)
    5. + (NSCharacterSet *)URLQueryComponentAllowedCharacterSet
    6. {
    7. static NSMutableCharacterSet *__URLQueryComponentAllowedCharacterSet = nil;
    8. if (!__URLQueryComponentAllowedCharacterSet)
    9. {
    10. __URLQueryComponentAllowedCharacterSet = [[NSMutableCharacterSet URLQueryAllowedCharacterSet] mutableCopy];
    11. [__URLQueryComponentAllowedCharacterSet removeCharactersInString:@"!$&'()*+,-./:;=?@_~%#[]"];
    12. }
    13. return __URLQueryComponentAllowedCharacterSet;
    14. }
    15. @end
    Alles anzeigen
  • Wahrscheinlich gibt es dafür keine versionsübergreifende, einheitliche Lösung. Ich würde NSURLQueryItem (Achtung: funktioniert aber nur mit UTF-8) verwenden, wenn es da ist und ansonsten die veraltete Funktion verwenden.

    Ansonsten kannst du dir ja auch mit NSScanner und NSCharacterSet einen eigenen Kodierer basteln. ;)
    „Meine Komplikation hatte eine Komplikation.“
  • hab mir jetzt string-additions geschrieben ;)

    Quellcode

    1. - (NSString *)stringByAddingPercentEncodingToQueryComponent
    2. {
    3. static NSMutableCharacterSet *__allowedCharacterSet = nil;
    4. if (!__allowedCharacterSet)
    5. {
    6. __allowedCharacterSet = [[NSMutableCharacterSet URLQueryAllowedCharacterSet] mutableCopy];
    7. [__allowedCharacterSet removeCharactersInString:@"!$&'()*+,-./:;=?@_~%#[]"];
    8. }
    9. return [stringByAddingPercentEncodingWithAllowedCharacters:__allowedCharacterSet];
    10. }
    Alles anzeigen