编码要求:
URI非保留字符"包括以下字符:字母(A-Z,a-z)、数字(0-9)、连字号(-)、点号(.)、下划线(_)、波浪线(~),算法实现如下:
//1. 将字符串转换成UTF-8编码的字节流
//2. 保留所有“URI非保留字符”原样不变
//3. 对其余字节做一次RFC 3986中规定的百分号编码(Percent-encoding),即一个“%”后面跟着两个表示该字节值的十六进制字母,字母一律采用大写形式。
在iOS中没有直接的方法可以调用,但是可以通过其他方法拼接组合而成:
1、先筛选不需要处理的字符串,直接拼接;
2、需要处理的字符串使用iOS方法CFBridgingRelease处理
3、拼接完整的字符串
- (NSString *)urlEncode:(NSString *)string
{
if (!string)
{
return @"";
}
//选择是否转换字符串
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];
}
//转换字符串
- (NSString *)fixString:(NSString *)str
{
return CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes
(NULL,
(__bridge CFStringRef)str,
NULL,
(CFStringRef)@":/?#[]@!$&’()*+,;='",//需要处理的符号
CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding)));
}