• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

Leerzeichen beseitigen bei GET-Request

bginner

Ingrid Marie
Registriert
13.12.09
Beiträge
266
Hallo zusammen,

Ich habe eine Verbindung zu einem Server per GET-Method aufgebaut, was ungefähr so aussieht:
Code:
NSString *myRequestString = [[NSString alloc] initWithFormat:@"http://mydomain.de/test/get.php?category=%@&location=%@&date=2010-05-09-14:08:17&status=InBearbeitung&image_path=test", category.text, location.text];
    
    
    NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:myRequestString]
                                              cachePolicy:NSURLRequestUseProtocolCachePolicy
                                          timeoutInterval:60.0];
    
    NSURLConnection *theConnection =[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
    
    if (theConnection) 
    {
        NSLog(@"Request: %@",theRequest);
        receivedData=[[NSMutableData data] retain];
        
    }
    else 
    {
        NSLog(@"Connection failed");
    }
    
}
// delegate-Methoden...
Das funktinoniert auch ganz gut, aber sobald ich in irgendeinem Parameter ein Leerzeichen drin habe, bekomme ich von der Delegate-Methode "didFailWithError" eine Fehlermeldung (Connection failed! Error - bad URL (null))
Dann dachte ich mir ok, dann gebe ich die URL mal mit Leerzeichen innerhlab der Parameter einfach in den Firefox ein... und siehe da..es funktioniert. Allerdings liegt es glaub ich daran, das Firefox die Leerzeichen umwandelt (in %20 oder so) aber wenn ich es mit meiner app sende, dann wird halt nix umgewandelt. Jetzt ist halt die Frage ob und wie ich es hinbekomme das ich das irgendwie umgewandelt bekomme, oder ob ich das Problem auf PHP-Basis angehen muss, je nachdem was sinnvoller oder einfacher ist. Weiß da jemand eine Lösung oder zumindest einen Lösungsansatz??
Ich steh echt grad auf'm Schlauch.

Ich danke euch schonmal....

EDIT: Wenns auf dem Server ankommt sollen die Leerzeichen natürlich wieder da sein, denn ein text ohne Leerzeichen macht nich viel sinn ;-)
 
Zuletzt bearbeitet:
Eine URL darf keine Leerzeichen enthalten, und auch noch so manch anderes Zeichen ist nicht erlaubt. Alle verbotenen Zeichen müssen escaped werden (%xx). Ein Leerzeichen darf auch durch "+" ersetzt werden.
(Ein Test im Browser ist keine Garantier für Standardkonformität, Fehlertoleranz oder vom Browser implizit vorgenommene Codierung können solche Tests verfälschen. Im Zweifel mal in den Standard gucken.)
Zumindest in Java gibt es fertige Encoder, die einen beliebigen String so codieren, dass er in eine Get-Request-URL aufgenommen werden darf (Cocoa sollte sowas doch auch haben, oder?). Der Server dekodiert das wieder.
 
Ja danke.. die zeichen müssen echt escaped werden, das ging bei mir nicht da ich keinen NSMutableString benutzt habe.
Gibt es irgendwo eine Tabelle in der steht wie all diese Zeichen richtig escaped werden? Und weiß jemand vielleicht ob Cocoa
da eine passende Funktion anbietet?

EDIT: So... passende Tabelle hab ich jetzt: http://www.homepage-total.de/html/unicode-tabelle.php#form2
Allerdings fehlt mir jetzt noch die passende Funktion, wenn es die in Cocoa überhaupt gibt.
 
Zuletzt bearbeitet:
Habe gerade mal gegoogled: NSString hat selbst Methoden zum Escapen und unescapen. Was Du brauchst ist NSStrings Methode
"stringByAddingPercentEscapesUsingEncoding:"

Dafür brauchst Du auch keinen NSMutableString.
 
Ja das klappt ganz gut mit der Methode, allerdings ist das mit den verschiedenen encodings so ne sache. es werden nie alle Zeichen unterstützt. Am besten eignet sich wohl NSWindowsCP1254StringEncoding, denn alle anderen ünterstützen nicht das €-Zeichen. Aber alle Zeichen sind damit auch nicht abgedeckt (z.B. "&" und "+") und auf der iPhone Tastatur kann man schon sehr böse zeichen eingeben.
 
ein € gehört auch nicht in eine URL...
Benutz doch lieber mal POST anstatt GET ;)