目录
1.写在前面
上周公司的一个项目,是GET方式的请求,需要在请求的Url中拼接,特殊字符的字符串,或者中文字符,作为参数传递,这就需要用urlencode处理一下。当然,有时作为Post参数传递,也有需要urlencode处理的情况,具体看自己的业务要求。
2.iOS 9.0之前
+ (NSString*)JP_URLEncodedString:(NSString*)unencodedString {
NSString *encodedString = (NSString *)
CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)unencodedString,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8));
return encodedString;
}
可以看到有警告
警告⚠️ 说iOS 9就不再使用上面的方法了
去系统方法里面有也可以看到,红色标记的说明了
3.iOS 9.0之后
+ (NSString *)JP_URLEncodedString:(NSString *)unencodedString{
NSString *charactersToEscape = @"?!@#$^&%*+,:;='\"`<>()[]{}/\\| ";//#%<>[\]^`{|} //@"!*'();:@&=+$,/?%#[]"
NSCharacterSet *allowedCharacters = [[NSCharacterSet characterSetWithCharactersInString:charactersToEscape] invertedSet];
NSString *encodedString = [unencodedString stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacters];
return encodedString;
}
系统内置的一些返回CharacterSet
NSCharacterSet`系统内置的一些返回CharacterSet 的方法
- URLFragmentAllowedCharacterSet "#%<>[\]^`{|}
- URLHostAllowedCharacterSet "#%/<>?@\^`{|}
- URLPasswordAllowedCharacterSet "#%/:<>?@[\]^`{|}
- URLPathAllowedCharacterSet "#%;<>?[\]^`{|}
- URLQueryAllowedCharacterSet "#%<>[\]^`{|}
- URLUserAllowedCharacterSet "#%/:<>?@[\]^`
具体例子就不贴出来了,下面的地址可以作为测试使用
在线测试网址 http://tool.chinaz.com/tools/urlencode.aspx