-2

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.

iCoder4777
  • 1,682
  • 1
  • 14
  • 35
  • 1
    Possible duplicate of https://stackoverflow.com/questions/705448/iphone-sdk-issue-with-ampersand-in-the-url-string and/or https://stackoverflow.com/questions/2159341/nsstring-method-to-percent-escape-for-url – mittmemo Dec 12 '14 at 14:20

2 Answers2

0

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)));
}
nburk
  • 22,409
  • 18
  • 87
  • 132
0

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]];
Suhit Patil
  • 11,748
  • 3
  • 50
  • 60