NSURL - Correct Encoding for parameters

521 Views Asked by At

In my code I need to do encoding NSURL from NSString if string contains some special character & in the parameters.

EX: NSString* urlText = @"70.84.58.40/projects/igolf/?TipThumb=GOLF & 58B.jpg&query=some";

Using stringByAddingPercentEscapesUsingEncodingwill not encode & and this would be treated as some other query in url. So, What would be correct format for encoding NSURL from NSStringin this case.

2

There are 2 best solutions below

0
On

You can use this static helper method to encode your strings for a URL:

+ (NSString*)urlEncode:(NSString*)encodingString
{
    return (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL,
       (CFStringRef)encodingString,
       NULL,
       (CFStringRef)@" ",
       CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding)));
}
0
On

you can create the Category on NSString to bypass the problem, try this link where solution is provided. Here is the sample code from the post

#import <Foundation/Foundation.h>
@interface NSString (URLEncoding)
-(NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding;
@end

And here’s the implementation:

#import "NSString+URLEncoding.h"
@implementation NSString (URLEncoding)
-(NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding {
    return (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
               (CFStringRef)self,
               NULL,
               (CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",
               CFStringConvertNSStringEncodingToEncoding(encoding));
}
@end

And now we can simply do this:

NSString *raw = @"GOLF & 58B.jpg&query=some";
NSString *url = [NSString stringWithFormat:@"70.84.58.40/projects/igolf/?TipThumb=%@",
            [raw urlEncodeUsingEncoding:NSUTF8Encoding]];