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”获取网址
答案 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]
不是?
的一部分。它是path
和path
之间的分隔符。
如果您尝试将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
答案 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编码。