ios9前:
-
编码
一般情况下含有中文的处理可以直接采用:
- (nullable NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)enc
但是,对于某些特殊字符是我们不需要转码,单独指定
resultStr = (NSString*)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)resultStr,(CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]",NULL, kCFStringEncodingUTF8));
-
解码
- (nullable NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)enc
ios9后:
-
编码
一般情况下含有中文的处理可以直接采用:
urlStr = [urlStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
但是,如果类似我们项目中h5用到vue加锚点的链接(http://xxx.com/#/newsSearch?title=哈哈&time=xxx
),其中的#
号也会转码,这就不是我们希望的了,可以换👇👇👇的方法:
NSString *unreserved = @"!*'\"();:@&=+$,/?%#[]%";
NSMutableCharacterSet *allowed = [NSMutableCharacterSet
alphanumericCharacterSet];// 字母数字集合
[allowed addCharactersInString:unreserved];
urlStr = [urlStr stringByAddingPercentEncodingWithAllowedCharacters:allowed];
- 解码
[urlStr stringByRemovingPercentEncoding];
网友评论