如何从 URL 中获取查询参数?

Posted

技术标签:

【中文标题】如何从 URL 中获取查询参数?【英文标题】:How to get query parameters from URL? 【发布时间】:2020-06-30 13:30:46 【问题描述】:

我正在创建手动 Firebase 动态链接

https://firebase.google.com/docs/dynamic-links/create-manually

我有一个https://test.page.link/?link=https://test.page.link/register?accessCode%3DAA000000&apn=com.test.foo&ibi=com.test.bar&ofl=https://www.google.com 格式的网址。

如何获取 accessCode 的值?

extension URL 
    
    func valueOf(_ queryParameterName: String) -> String? 
        guard let url = URLComponents(string: self.absoluteString) else  return nil 

        return url.queryItems?.first(where:  $0.name == queryParameterName )?.value
    

使用此扩展,查询项为linkapnofl

url.valueOf("link") 返回:

https://test.page.link/?link=https://test.page.link/register?accessCode=AA000000

我只需要返回的AA000000

【问题讨论】:

有“subURL”,即url里面的url。您需要在aQuery.value 上调用该方法才能找到它。 【参考方案1】:

由于link是一个url的格式,从它创建一个URL实例,然后像这样使用valueOf(_:)方法获取accessCode的值,

if let link = url.valueOf("link"), let linkUrl = URL(string: link) 
    let accessCode = linkUrl.valueOf("accessCode")
    print(accessCode)

【讨论】:

太棒了。如果答案有帮助,请接受。快乐编码?【参考方案2】:

你在一个 URL 中有一个 URL,更准确地说,一个查询值中有一个 URL,那么如何使用:

extension URL 
    
    func valueOf(_ queryParameterName: String) -> String? 
        guard let url = URLComponents(string: self.absoluteString) else  return nil 
        guard let queryItems = url.queryItems else  return nil 
        for aQueryItem in queryItems 
            if aQueryItem.name == queryParameterName 
                return aQueryItem.value
             else if let subvalue = aQueryItem.value, let subURL = URL(string: subvalue), let found = subURL.valueOf(queryParameterName) 
                return found
            
        
        return nil
    

现在你可以使用url.valueOf("accessCode")

【讨论】:

不得不稍作修改,但现在它可以用于所有可用的参数选项 ``` else if let subvalue = aQueryItem.value, let subURL = URL(string: subvalue) if let subUrlValue = subURL.valueOf(queryParameterName) return subUrlValue ``` 哎呀,确实,如果在子查询中找不到它,就忘了那个案例。接得好。应该是固定的。

以上是关于如何从 URL 中获取查询参数?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 getInitialProps 中的 url 获取查询参数?

如何从 Angular 2 中的 url 获取查询参数?

如何从 Swift 3 xcode8 的 UIWebView 中的 url 获取查询字符串参数?

如何从 MVC Razor 标记中获取查询字符串参数?

如何从PHP中的URL获取多个同名参数并将所有记录插入表中

如何在页面加载时处理辅助bean中的GET查询字符串URL参数?