編碼要求:
URI非保留字符"包括以下字符:字母(A-Z抓韩,a-z)讶迁、數(shù)字(0-9)连茧、連字號(-)、點(diǎn)號(.)、下劃線(_)啸驯、波浪線(~)客扎,算法實(shí)現(xiàn)如下:
//1. 將字符串轉(zhuǎn)換成UTF-8編碼的字節(jié)流
//2. 保留所有“URI非保留字符”原樣不變
//3. 對其余字節(jié)做一次RFC 3986中規(guī)定的百分號編碼(Percent-encoding),即一個(gè)“%”后面跟著兩個(gè)表示該字節(jié)值的十六進(jìn)制字母罚斗,字母一律采用大寫形式徙鱼。
在iOS中沒有直接的方法可以調(diào)用,但是可以通過其他方法拼接組合而成:
1针姿、先篩選不需要處理的字符串袱吆,直接拼接;
2距淫、需要處理的字符串使用iOS方法CFBridgingRelease處理
3绞绒、拼接完整的字符串
- (NSString *)urlEncode:(NSString *)string
{
if (!string)
{
return @"";
}
//選擇是否轉(zhuǎn)換字符串
NSString *saveStr = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-._~";//保留字符
NSMutableString *mtbStr = [NSMutableString string];
NSString *str;
for (int i = 0; i < string.length; i ++)
{
str = [string substringWithRange:NSMakeRange(i, 1)];
if ([saveStr rangeOfString:str].location != NSNotFound)
{
[mtbStr appendString:str];
}
else
{
[mtbStr appendString:[self fixString:str]];
}
}
return [NSString stringWithString:mtbStr];
}
//轉(zhuǎn)換字符串
- (NSString *)fixString:(NSString *)str
{
return CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes
(NULL,
(__bridge CFStringRef)str,
NULL,
(CFStringRef)@":/?#[]@!$&’()*+,;='",//需要處理的符號
CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding)));
}