Search code examples
iphoneobjective-ciosparse-urlcxml

Sanitising URLS (mainly for spaces) when parsing XML iPhone


I'm parsing XML using CXML in my iphone app, works fine when the locaiton I'm searching for (using query string) is a single word. However when I add a space (Say i'm searching for shoe shop) it falls over. I tried replacing the " " space with a %20 but it doesn't seem to be able to read that url back when it parses.

My code:

- (IBAction)doSearch {

    NSString *trimmedWhat = [txtboxWhat.text stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
    NSString *trimmedWhere = [txtboxWhere.text stringByReplacingOccurrencesOfString:@" " withString:@""];

    NSString *tempFullUrl = [NSString stringWithFormat:@"http://sampleurl.com/mobilesearch/place/%@/0/0/0/%@/0/0/0/0/0/0/0/0/search.aspx", trimmedWhat,  trimmedWhere];
    searchType = @"fullSearch";
    NSLog(@"Full String: %@",tempFullUrl);
    NSLog(@"Search Type: %@",searchType);

    PromotionViewController *passArray = [[PromotionViewController alloc] initWithNibName:@"PromotionViewController" bundle:nil];
    [passArray setCurrentCat: tempFullUrl];
    [passArray setCurrentType: searchType];     
    [self.navigationController pushViewController:passArray animated:YES];
    [PromotionViewController release];
}

Then on my PromotionViewController:

 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:                                
    [NSURL URLWithString: [NSString stringWithFormat:[NSString stringWithFormat:@"%@", currentCat]]]];
    [request setHTTPMethod: @"GET"];
    dataReply = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    stringReplyServer = [[NSString alloc] initWithData:dataReply encoding:NSUTF8StringEncoding];

    if(currentType == @"categorySearch") {
...do parse
}

It just seems to fall over when the returning url for place

How do I sanitise the URL?

Tom

EDIT

I've added the following to my original pass through of search

 NSString *utfString = [tempFullUrl UTF8String];

    PromotionViewController *passArray = [[PromotionViewController alloc] initWithNibName:@"PromotionViewController" bundle:nil];
    [passArray setCurrentCat: utfString];
    [passArray setCurrentType: searchType];     
    [self.navigationController pushViewController:passArray animated:YES];
    [PromotionViewController release];

however it falls over with the following:

2011-11-18 10:41:52.677 Del Search[2312:f203] Full String: http://web-xml.asdasdas.com/mobilesearch/place/(null)/0/0/0/<UITextField: 0x74709d0; frame = (15 7; 286 31); text = 'london'; clipsToBounds = YES; opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7470af0>>/0/0/0/0/0/0/0/0/search.aspx

Solution

  • To fix it I just did:

    NSString *utfString = [currentCat stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];