NSString *password = @"Top+Secret. ";
NSString *encoded_normal = [password stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *encoded_safer = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)password, NULL, (CFStringRef)@"!*'();:@&=+$,/?%#[]", kCFStringEncodingUTF8);
// output with %@ otherwise the % escapes cause strange output
NSLog(@"%@", password);
NSLog(@"%@", encoded_normal);
NSLog(@"%@", encoded_safer);
通過輸出情況看,用
stringByAddingPercentEscapesUsingEncoding:方法編碼時,+號沒有編碼,存在不encode的情況
推薦使用
CFURLCreateStringByAddingPercentEscapes()
下面是一個給NSString添加的類別,來實現encode
#import
@interface NSString (Helpers)
// helper functions
- (NSString *) stringByUrlEncoding;
@end
#import "NSString+Helpers.h"
@implementation NSString (Helpers)
#pragma mark Helpers
- (NSString *) stringByUrlEncoding
{
return (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)self, NULL, (CFStringRef)@"!*'();:@&=+$,/?%#[]", kCFStringEncodingUTF8);
}