Reputation: 21
I am using stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding
to pass data to a php script. The problem is if the field has the char '&' in the text lets say: 'someone & cars', only the text "someone" is saved, everything after the '&' doesn't.
To create the string I use [NSString stringWithFormat:]
, so I have like 5 field in the form and if I use stringbyReplacingOcorrencesOfstring:@"&"
, what it does is replace the whole string not only the char '&' from the text field, so I get error.
Any ideas?
Upvotes: 1
Views: 2712
Reputation: 4471
Following works using stringByAddingPercentEncodingWithAllowedCharacters
if you want to specifically allow what would be encoded yourself. I'm using after base64 so this works fine.
NSString *charactersToEscape = @"!*'();:@&=+$,/?%#[]\" ";
NSCharacterSet *customEncodingSet = [[NSCharacterSet characterSetWithCharactersInString:charactersToEscape] invertedSet];
NSString *url = [NSString stringWithFormat:@"%@", @"http://www.test.com/more/test.html?name=john&age=28"];
NSString *encodedUrl = [url stringByAddingPercentEncodingWithAllowedCharacters:customEncodingSet];
Upvotes: 2
Reputation: 6990
Unfortunately, stringByAddingPercentEscapesUsingEncoding:
doesn't actually escape all necessary URL characters.
Instead, you can use the lower-level CoreFoundation function:
(NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)myString, NULL, (CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ", CFStringConvertNSStringEncodingToEncoding(encoding));
or, when using ARC:
CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL, (__bridge CFStringRef)myString, NULL, (__bridge CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ", CFStringConvertNSStringEncodingToEncoding(encoding)));
See this post for an example of a category on NSString
that uses this function.
Upvotes: 6