如何从 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
使用此扩展,查询项为link
、apn
和ofl
。
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 获取查询参数?