如何在swift中将字符串转换为URL

Aks*_*are 1 iphone xcode ios swift

我想将下面的String转换为URL

www.mydomain.com/key=?????

我试过let urlToSend = URL(string: "www.mydomain.com/key=?????")!但它返回零.

我从textField获得了'षक्षय'关键字,它可以是任何本地语言.

它适用于英语但不能使用当地语言.

我用let url = URL(string: "www.mydomain.com")?.appendingPathComponent("key=?????")它给了www.mydomain.com/key=%E0%A4%85%E0%A4%95%E0%A5%8D%E0%A4%B7%E0%A4%AF

但现在我要 www.mydomain.com/key=%E0%A4%85%E0%A4%95%E0%A5%8D%E0%A4%B7%E0%A4%AFwww.mydomain.com/key=?????

Oli*_*kko 5

您需要对 URL 进行编码。

\n\n
let urlString = "www.mydomain.com/key=\xe0\xa4\x85\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb7\xe0\xa4\xaf".addingPercentEncoding(withAllowedCharacters: .urlPathAllowed)\nlet url = URL(string: urlString!)\n\nlet decodedUrl = urlString?.removingPercentEncoding\n
Run Code Online (Sandbox Code Playgroud)\n\n

请记住,您不应该强制解开 URL 和字符串,而应使用 if let 或 Guard 语句。

\n


Ahm*_*d F 5

使用URL作为字符串时,您应该将它们编码为URL有效; 编码URL的最流行的例子之一是""(空格)将被编码为"%20".

因此,在您的情况下,您的网址的编码值应为:

www.mydomain.com%2Fkey=%E0%A4%85%E0%A4%95%E0%A5%8D%E0%A4%B7%E0%A4%AF
Run Code Online (Sandbox Code Playgroud)

正如您所注意到的那样,价值key会发生变化

来自:"अक्षय"

到: "%E0%A4%85%E0%A4%95%E0%A5%8D%E0%A4%B7%E0%A4%AF"

这将使URL有效.

如何:

你可以得到上面这样的结果:

let string = "www.mydomain.com/key=?????"

if let encodedString  = string.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed), let url = URL(string: encodedString) {
    print(url) // www.mydomain.com%2Fkey=%E0%A4%85%E0%A4%95%E0%A5%8D%E0%A4%B7%E0%A4%AF
}
Run Code Online (Sandbox Code Playgroud)

请注意,为了安全起见,编码字符串和url都有可选绑定.

解码网址:

您还可以返回原始未编码的URL(解码它),如下所示:

let decodedString = "www.mydomain.com%2Fkey=%E0%A4%85%E0%A4%95%E0%A5%8D%E0%A4%B7%E0%A4%AF"

if let unwrappedDecodedString = decodedString.removingPercentEncoding {
    print(unwrappedDecodedString) // www.mydomain.com/key=?????
}
Run Code Online (Sandbox Code Playgroud)

再次,可选绑定是安全的.