迅捷4.2,url.appendingPathComponent

时间:2018-12-28 07:34:07

标签: ios swift url swift4

let url = URL(string: "https://example.com")
let path = "/somePath?"
let urlWithPath = url?.appendingPathComponent(path)

我有问题, 路径=“ / somePath?”。

但是在追加之后,路径变为somePath%3F (?变成%3F)

如果这个技巧还可以的话

let urlFormString = URL(string:"https://example.com/somePath?")

为什么当我尝试附加PathComponent时(?变成%3F)

如何解决 我需要带有“?”的网址但使用“%3F”获取网址

6 个答案:

答案 0 :(得分:1)

您应该在URL的removingPercentEncoding上使用absoluteString

let url = URL(string: "https://example.com")
let path = "/somePath?"
let urlWithPath = url?.appendingPathComponent(path).absoluteString.removingPercentEncoding
print(urlWithPath!)

答案 1 :(得分:1)

URL的通用格式如下:

UPDATE yourTable t1
SET Status = 'Completed'
WHERE
    Job = 'Completed' AND
    NOT EXISTS (SELECT 1 FROM yourTable t2
                WHERE t1.Name = t2.Name AND
                      (t2.Job <> 'Completed' OR t2.Job IS NULL));

您必须意识到,scheme:[//[userinfo@]host[:port]]path[?query][#fragment] 不是?的一部分。它是pathpath之间的分隔符。

如果您尝试将query添加到路径,则必须对其进行URL编码,因为?对于路径组件而言不是有效字符。

最好的解决方案是将??中删除。那里没有任何意义。但是,如果您有部分URL想要附加到基本URL,则应将它们作为字符串加入:

path

简而言之,let url = URL(string: "https://example.com") let path = "/somePath?" let urlWithPath = url.flatMap { URL(string: $0.absoluteString + path) } 不是应该用于附加URL查询的函数。

答案 2 :(得分:0)

根据网址编码,

%3F代表?。因此,如果您创建一个URL,则必须采用这种方式。如果由于某种原因需要使用?,则创建一个字符串而不是URL。

检查urlWithPath.lastPathComponent以确保一切正常(打印:“ somePath?”)

答案 3 :(得分:0)

将字符串转换为URL时,将在URL中执行PercentEncoding。这样您的?已被编码为%3F

如果您希望使用?将url作为字符串,则可以像下面的代码一样删除PercentEncoding。

let urlString = urlWithPath?.absoluteString.removingPercentEncoding

Output: https://example.com/somePath?

答案 4 :(得分:0)

首先这不是问题。这是一种称为URL编码的机制,用于将不可打印或特殊字符转换为Web服务器和浏览器普遍接受的格式。

有关更多信息,请访问https://www.techopedia.com/definition/10346/url-encoding

URL编码的字符,https://www.degraeve.com/reference/urlencoding.php

答案 5 :(得分:0)

您可以使用NSString类构建网址:

let urlStr = "https://example.com" as NSString
let path = "/somePath?"
let urlStrWithPath = urlStr.appendingPathComponent(path)
let url = URL(string: urlStrWithPath)

这样,特殊字符不会在最终URL中进行url编码。