美文网首页
iOS URL编码

iOS URL编码

作者: Freedom_fly | 来源:发表于2018-05-10 16:30 被阅读19次
1、原始方法:stringByAddingPercentEscapesUsingEncoding: ios(2.0,9.0)
image.png
NSString *data = @"https://baike.baidu.com/item/百度百科/85895?fr=aladdin";
NSString *urlStr = [data stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@", urlStr);

结果输出:

https://baike.baidu.com/item/%E7%99%BE%E5%BA%A6%E7%99%BE%E7%A7%91/85895?fr=aladdin
2、新方法:stringByAddingPercentEncodingWithAllowedCharacters: ios(7.0)
NSString *data = @"https://baike.baidu.com/item/百度百科/85895?fr=aladdin";

// 以下两句代码处理结果一样:对`#%^{}[]|\"<>空格 这些字符进行编码
NSString *dataUTF8 = [data stringByAddingPercentEncodingWithAllowedCharacters:[[NSCharacterSet characterSetWithCharactersInString:@"`#%^{}[]|\"<> "] invertedSet]];
// NSString *dataUTF8 = [data stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];  

NSLog(@"%@",dataUTF8);

结果输出:

https://baike.baidu.com/item/%E7%99%BE%E5%BA%A6%E7%99%BE%E7%A7%91/85895?fr=aladdin

NSCharacterSet (NSURLUtilities)

URLFragmentAllowedCharacterSet  "#%<>[\]^`{|}
URLHostAllowedCharacterSet      "#%/<>?@\^`{|}
URLPasswordAllowedCharacterSet  "#%/:<>?@[\]^`{|}
URLPathAllowedCharacterSet      "#%;<>?[\]^`{|}
URLQueryAllowedCharacterSet    "#%<>[\]^`{|}
URLUserAllowedCharacterSet      "#%/:<>?@[\]^`

但是现在有的URL中包含的#是不需要进行编码的,可以修改代码为:

// 字符集中若哪个字符不需要编码,去掉即可
NSString *dataUTF8 = [data stringByAddingPercentEncodingWithAllowedCharacters:[[NSCharacterSet characterSetWithCharactersInString:@"`%^{}[]|\"<> "] invertedSet]]; 

参考资料:
url出现特殊字符处理

相关文章

网友评论

      本文标题:iOS URL编码

      本文链接:https://www.haomeiwen.com/subject/nextdftx.html