我在网络服务器上有一个正在运行的应用程序,该应用程序重定向到安装在iOS 14设备上的应用程序。
网址的格式为myapp://?p=someBase64EncodedString应用程序正在解码字符串。
升级到iOS 14之后,应用获取的网址是myapp://?p=someBase64EncodedString#并且添加到字符串末尾的英镑符号无法在我的设备上解码。
使用ignoreUnknownCharacters时,一切正常,但是此#是从哪里来的呢?

最佳答案

正如评论中提到的@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")")
这将作为输出:

10-06 08:42