iOS中URL的分段解析

URL

在做URL的地址处理的时候,会经常对url字符串做截取其中的某一部分的操作,会在代码里经常的看到有人使用rangeOfStringsubstringWithRangesubstringFromIndex来处理。
其实对于系统封装的NSURL类已经给我们提供了一些列的属性来帮助我们去获取URL不同位置的属性值了。

URL完整的拼接格式如下:

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

在这里将使用以下这个测试的URL做说明。

http://myusername:mypassword@www.baidu.com:8080/myapp/sign/test.pdf;p1=parameter01&p2=parameter02?t=19348197343&r=0.34871893486828#ref

  • scheme

    模式、协议,它告诉浏览器如何处理将要打开的文件。最常用的就是httphttps,还有其他的,诸如ftpmailtofiletelnet等。在这里就是http
    这里有篇文章,讲得是其在iOS中的详细用法:少数派

  • resourceSpecifier

    资源说明符,URL协议冒号后所有的部分。在这里它的resourceSpecifier就是http:后面的所有内容。
    一个完整的URL必须包含schemeresourceSpecifier
    注意,如果使用了relativeToURLite的话,那么此时它的resourceSpecifier将会是前面的string内容。
    举个例子:

    NSURL *baseURL = [NSURL URLWithString:@"http://www.baidu.com"];
    NSURL *url = [NSURL URLWithString:@"myapp/sign/pdf" relativeToURL:baseURL];
    

    此时它的resourceSpecifier将会是myapp/sign/pdf

  • baseURL

    如上一项中第二个例子中的的baseURL,但是第一个例子的话则会是nil

  • absoluteURL

    拼接后完整的URL路径。

  • userpassword

    即用户名、密码,提供远程登录的功能。在协议后host前的部分。比如这里的myusernamemypassword

  • host

    主机地址,这里的www.baidu.com

  • port

    访问的端口,跟在host之后path之前的数字内容,比如80804000等。

  • path

    访问的服务器端的路径。在这里是/myapp/sign/test.pdf

  • pathComponents

    详细的路径层级,是一个数组对象,比如http://www.baidu.com/myapp/sign/pdf,该值将会是{"/",myapp,sign,test.pdf}这样四个元素的数组。注意了,数组的第一个元素是"/"

  • lastPathComponent

    取得是pathComponents数组的最后一个元素,即test.pdf

  • pathExtension

    如果lastPathComponent是一个带类型的文件名的话,则调用此参数会获得文件的类型。在这里就是pdf

  • parameterString

    path之后query之前的部分,即;?前的部分,即p1=parameter01&p2=parameter02

  • query

    要查询的参数拼接的字符串,一般都是?之后的部分,不同参数之间使用&进行拼接,即t=19348197343&r=0.34871893486828

  • fragment

    锚点。比如打开一个网页后,需要滚动到某个位置,这就需要在url后面添加一个锚点信息。一般是跟在url的最后面,前面带着一个#
    比如这里的地址,将会在打开的页面,直接滚动到ref的位置。

详细内容可以看RFC1808

发表评论

电子邮件地址不会被公开。