1.本编解码方法的功能说明
-
UrlEncode方法
把任何参数转换成适合放在URL中的字符串。具体规则:
- 字母,数字,连字符不变。
- 空格转换成加号。
- 其他所有的字符转换成用百分号表示,并接上字符的两位十六进制编码。如%2F
-
UrlDecode方法
其功能与编码相反
2. 字符串在编码之前之后的效果
原字符串:
Vk/nQmguwJIN
编码之后:
Vk%2FnQmguwJIN
解码之后:
Vk/nQmguwJIN
3.UrlEncode/UrlDecode方法的实现
编码
+(NSString*)encodeString:(NSString*)unencodedString{
// CharactersToBeEscaped = @":/?&=;+!@#$()~',*";
// CharactersToLeaveUnescaped = @"[].";
NSString *encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)unencodedString,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8));
return encodedString;
}
解码
//URLDEcode
+(NSString *)decodeString:(NSString*)encodedString
{
//NSString *decodedString = [encodedString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding ];
NSString *decodedString = (__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL,(__bridge CFStringRef)encodedString,CFSTR(""),CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
return decodedString;
}
4.使用建议
建议自己写个Category。比如,可以基于NSString新建一个URLEncoding类别文件,类名分别为NSString+URLEncoding.h和NSString+URLEncoding.m。然后,在你需要的地方导入该头文件即可。作为对比,与上面的实现不同,下面采用replaceOccurrencesOfString:方法实现解码功能。
其中:
NSString+URLEncoding.h
#import <Foundation/Foundation.h>
@interface NSString (URLEncoding)
// 字符串转码
- (NSString*)urlEncodeString;
// 反URL编码
- (NSString *)decodeFromPercentEscapeString;
@end
NSString+URLEncoding.m
#import "NSString+URLEncoding.h"
@implementation NSString (URLEncoding)
// 字符串编码
- (NSString *)urlEncodeString
{
NSString *result = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)self, NULL, CFSTR(":/?#[]@!$&’(){}<>*+,;="),kCFStringEncodingUTF8));
return result;
}
// 反URL编码
- (NSString *)decodeFromPercentEscapeString
{
NSMutableString *outputStr = [NSMutableString stringWithString:self];
[outputStr replaceOccurrencesOfString:@"+"
withString:@" "
options:NSLiteralSearch
range:NSMakeRange(0, [outputStr length])];
return [outputStr stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
}
5. 调用范例
在调用处的类中
#import "NSString+URLEncoding.h"
然后,调用上述方法:
[testStr urlEncodeString];
即可。