iOS相关

iOS:URI的规范的百分比编码和解码

2018-01-02  本文已影响73人  上发条的树

参考

关于URI编码

在URI的规范中定义了一些保留字符,如":","/","?","&","=","@","%"等字符,在URI中都有他的作用。如果要在请求参数上表达URI的这写保留字符,必须在%字符后以十六进制的数值表示,来表示该字符的八个字符数值。

例如:":"字符用十六进制来表示为3A,所以必须使用%3A来表示,"/"字符用十六进制来表示为2F,所以必须使用%2F来表示"/"字符。

iOS中的方式

在iOS中可以用stringByAddingPercentEncodingWithAllowedCharacters对URI进行编码,使用stringByRemovingPercentEncoding进行解码:

stringByAddingPercentEncodingWithAllowedCharacters:

stringByRemovingPercentEncoding

例如:

NSString *urlStr = @"https://www.baidu.com";
urlStr = [urlStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLUserAllowedCharacterSet]];
NSLog(@"百分比编码:%@",urlStr);
urlStr = [urlStr stringByRemovingPercentEncoding];
NSLog(@"解码:%@",urlStr);

打印结果:

百分比编码:https%3A%2F%2Fwww.baidu.com
解码:https://www.baidu.com

从方法定义,可以看到,传入参数是一个NSCharacterSet对象

- (NSString *)stringByAddingPercentEncodingWithAllowedCharacters:(NSCharacterSet *)allowedCharacters;

具体的参数在NSCharacterSet的分类中NSURLUtilities以属性的格式对外暴露,我们只能readonly

这么多选择,第一个URLUserAllowedCharacterSet对应整一条的URL。其他的对应URL的各个部分。

URL的组成

URL提供了一种访问定位因特网上任意资源的手段,这些资源可以通过不同的方式(HTTP/FTP/SMTP)来访问。无论是那种方式,基本上有9个部分组成:

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<fragment>

例如:

    NSString *urlStr = @"https://www.xxx.com:8888/file/index.html?username=wxx&password=123#1";
    NSURL *url = [NSURL URLWithString:urlStr];
    NSLog(@"%@",url.scheme);
    NSLog(@"%@",url.host);
    NSLog(@"%@",url.port);
    NSLog(@"%@",url.path);
    NSLog(@"%@",url.query);
    NSLog(@"%@",url.fragment);

打印结果:

https
www.xxx.com

8888
/file/index.html
username=wxx&password=123
1

上一篇 下一篇

猜你喜欢

热点阅读