美文网首页iOS相关
iOS:URI的规范的百分比编码和解码

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

作者: 上发条的树 | 来源:发表于2018-01-02 10:41 被阅读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
  • URLPasswordAllowedCharacterSet
  • URLHostAllowedCharacterSet
  • URLPathAllowedCharacterSet
  • URLQueryAllowedCharacterSet
  • URLFragmentAllowedCharacterSet

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

URL的组成

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

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

  • scheme
    获取资源的协议,例如HTTP、FTP等。

  • user:password
    用户名和密码,一般范围FTP资源才需要。

  • host
    主机名,访问的那台主机,有时候可以是IP,有时候可以是主机名。

  • port
    端口号,如果HTTP的访问默认是80,可以省略。

  • path
    上面通过host:post找得到我们的主机,而主机中文件很多,因此需要通过path定位具体文件的位置。

  • params
    这个很少见,主要作用就是像服务器提供额外的参数,用来表示本次请求的一些特性。例如ftp传输模式有两种,二进制和文本,你肯定不希望使用文本形式传输二进制图片,这样你的图片下载下来后可能没法看了。为了向应用程序提供更丰富的信息,URL中有个专门的部分来表示这种参数。例如ftp://file.xxx.com/pub/guid.pdf;type=d其中的type=d就是params

  • query
    通过get方式请求的参数部分。例如:http://www.xxx.com/index.html?username=wxx&password=123,其中username=wxx&password=123就是query

  • fragment
    当html页面比较长时,我们通常会将其分为好几段,可以快速定位到某一段。例如http://www.xxx.com/index.html#1,#1可以快速定位到其中一段。

例如:

    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

相关文章

网友评论

    本文标题:iOS:URI的规范的百分比编码和解码

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