为什么NSURL在方案之后使用双正斜杠解析字符串与具有单个正斜杠的字符串不同?

 Ajax 发布于 2023-02-10 14:47

将字符串解析为NSURL对象时,NSURL使用单个正斜杠将字符串处理为与方案后面带有双正斜杠的字符串不同.

为什么会这样?

以下是一些例子:

NSURL *url = [NSURL URLWithString:@"app-id://path1/path2"];

NSLog(@"%@",url.scheme);    // "app-id"
NSLog(@"%@",url.path);      // "/path2"
NSLog(@"%@",url.host);      // "path1"


NSURL *url = [NSURL URLWithString:@"app-id:/path1/path2"];

NSLog(@"%@",url.scheme);    // "app-id"
NSLog(@"%@",url.path);      // "/path1/path2"
NSLog(@"%@",url.host);      // nil

Jessedc.. 7

这两个字符串的处理方式不同,因为第一个字符串//符合RFC 1808而第二个字符串不符合.

第一个字符串是标准的互联网URL,第二个字符串省略了"权限组件"(参见RFC 2396第3.2节)并立即开始路径组件,因此不符合RFC 1808.

RFC1808

RFC 1808定义了"相对统一资源定位符",它们是目前最常见的URI并使用以下//格式:

:///;?#

//是1808的必需组件,RFC 2396声明该组件//被称为Authority Component(参见seciton 3.2),它充当路径的顶级元素或命名空间.该路径从下一个正斜杠开始.

权限组件前面有一个双斜杠"//",并由下一个斜杠"/",问号"?"或URI的末尾终止.

单正斜杠

使用单个正斜杠会Authority Component立即省略并启动路径组件.

NSURL

NSURL将Authority ComponentURL作为主机参数公开,并提到它仅作为符合1808的URL的一部分提供:

[主机]返回值

URL的主机.如果接收方不符合RFC 1808,则返回nil.

这就是为什么NSURL主题组件nil处于第二种情况以及为什么路径包含冒号后的所有内容的原因.

1 个回答
  • 这两个字符串的处理方式不同,因为第一个字符串//符合RFC 1808而第二个字符串不符合.

    第一个字符串是标准的互联网URL,第二个字符串省略了"权限组件"(参见RFC 2396第3.2节)并立即开始路径组件,因此不符合RFC 1808.

    RFC1808

    RFC 1808定义了"相对统一资源定位符",它们是目前最常见的URI并使用以下//格式:

    <scheme>://<net_loc>/<path>;<params>?<query>#<fragment>
    

    //<net_loc>是1808的必需组件,RFC 2396声明该组件//被称为Authority Component(参见seciton 3.2),它充当路径的顶级元素或命名空间.该路径从下一个正斜杠开始.

    权限组件前面有一个双斜杠"//",并由下一个斜杠"/",问号"?"或URI的末尾终止.

    单正斜杠

    使用单个正斜杠会Authority Component立即省略并启动路径组件.

    NSURL

    NSURL将Authority ComponentURL作为主机参数公开,并提到它仅作为符合1808的URL的一部分提供:

    [主机]返回值

    URL的主机.如果接收方不符合RFC 1808,则返回nil.

    这就是为什么NSURL主题组件nil处于第二种情况以及为什么路径包含冒号后的所有内容的原因.

    2023-02-10 14:50 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有