【问题标题】:Pound symbol added to URL in ios 14在 ios 14 中添加到 URL 的磅符号
【发布时间】:2020-11-05 13:12:34
【问题描述】:

我在网络服务器中有一个正在运行的应用程序,它重定向到安装在 iOS 14 设备上的应用程序。 网址格式为

myapp://?p=someBase64EncodedString

并且应用程序正在解码字符串。 升级到iOS 14后,应用获取的url是

myapp://?p=someBase64EncodedString# 并且添加到字符串末尾的磅符号无法在我的设备上解码。 当使用ignoreUnknownCharacters 时一切正常,但是这个# 是从哪里来的?

【问题讨论】:

  • 应用如何解码 url? # 在 URL 中完全有效,表示片段的开始。另见stackoverflow.com/questions/6691495/…
  • 你能发布完整的网址吗? (包括someBase64EncodedString

标签: swift url base64 ios14


【解决方案1】:

正如 cmets 中提到的 @jtbandes,# 是 URL 中的有效字符。

为避免此类问题,解析 URL 的最安全方法是使用URLComponents,遵循this 的答案。

这是一个例子:

let urlString = "https://test.host.com:8080/Test/Path?test_parameter=test_value#test-fragment"
let urlComponents = URLComponents(string: urlString)

print("scheme: \(urlComponents?.scheme ?? "nil")")
print("host: \(urlComponents?.host ?? "nil")")
print("port: \(urlComponents?.port ?? -1)")
print("path: \(urlComponents?.path ?? "nil")")
print("query: \(urlComponents?.query ?? "nil")")
print("queryItems: \(urlComponents?.queryItems ?? [])")
print("fragment: \(urlComponents?.fragment ?? "nil")")

这将作为输出:

scheme: https
host: test.host.com
port: 8080
path: /Test/Path
query: test_parameter=test_value
queryItems: [test_parameter=test_value]
fragment: test-fragment

【讨论】:

    【解决方案2】:

    Swift 5 和原始字符串会是罪魁祸首吗?我的猜测是应用程序使用 # 作为自定义字符串分隔符,并且在解码时将某些特殊字符替换为 #。

    【讨论】:

    【解决方案3】:

    它可能是您使用的 api 重定向中的 api 操作。如果是这样,它就超出了您的控制范围并且可能是访问范围。

    【讨论】:

      猜你喜欢
      • 2018-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-25
      • 2015-01-11
      • 1970-01-01
      • 2023-03-29
      相关资源
      最近更新 更多