2014-12-12 3 views
-2

В моем коде мне нужно сделать кодировку NSURL от NSString, если строка содержит специальный символ & в параметрах.NSURL - Правильное кодирование параметров

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

Использование stringByAddingPercentEscapesUsingEncoding не будет кодировать & и это будет рассматриваться как некоторый другой запрос в URL. Итак, что будет правильным форматом для кодирования NSURL от NSString в этом случае.

+1

Возможный дубликат https: // StackOverflow. com/questions/705448/iphone-sdk-issue-with-ampersand-in-the-url-string и/или https://stackoverflow.com/questions/2159341/nsstring-method-to-percent-escape-for- URL – mittmemo

ответ

0

Вы можете использовать этот статический вспомогательный метод для кодирования строки для URL:

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

вы можете создать категорию на NSString, чтобы обойти эту проблему, попробуйте этот link где предоставляется решение. Вот пример кода с поста

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

А вот реализация:

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

И теперь мы можем просто сделать это:

NSString *raw = @"GOLF & 58B.jpg&query=some"; 
NSString *url = [NSString stringWithFormat:@"70.84.58.40/projects/igolf/?TipThumb=%@", 
      [raw urlEncodeUsingEncoding:NSUTF8Encoding]]; 
Смежные вопросы