变更记录

序号 录入时间 录入人 备注
1 2016-01-18 Alfred Jiang -

方案名称

NSURL - 特殊字符处理

关键字

NSURL \ 特殊字符 \ 参数 \ 请求

需求场景

  1. 针对某些带有特殊字符的 URL 无法正确请求数据的场景

参考链接

  1. 简书 - iOSURL特殊字符处理
  2. 博客园 - ios中对url中得特殊字符处理

详细内容

iOS 9 之前

方法一 : CFURLCreateStringByAddingPercentEscapes
1
2
3
4
5
NSString *UrlEncodedString(NSString *sourceText)
{
NSString *result = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)sourceText ,NULL ,CFSTR("!*'();@&+$?%#[]") ,kCFStringEncodingUTF8));// ", / : ="
return result;
}

使用

1
2
3
NSString *str = @"http://img5.imgtn.bdimg.com/it/u=1478257864,2882073929%26fm=21%26gp=0.jpg";

NSString *urlStr = UrlEncodedString(str);
方法二 : stringByAddingPercentEscapesUsingEncoding
1
2
3
NSString *str = @"http://img5.imgtn.bdimg.com/it/u=1478257864,2882073929%26fm=21%26gp=0.jpg";

NSString *urlStr = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

iOS 9 之后

使用 stringByAddingPercentEncodingWithAllowedCharacters
1
2
3
NSString *str = @"http://img5.imgtn.bdimg.com/it/u=1478257864,2882073929%26fm=21%26gp=0.jpg";

NSString *urlStr = [str stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];

以上三种方法转换结果都是一样的:

1
2
(lldb) po urlStr
http://img5.imgtn.bdimg.com/it/u=1478257864,2882073929%2526fm=21%2526gp=0.jpg

效果图

(无)

备注

(无)