繁体   English   中英

如何快速将字符串转换为URL

[英]How to convert string to URL in swift

我想将String下面的内容转换为URL

www.mydomain.com/key=अक्षय

我试着let urlToSend = URL(string: "www.mydomain.com/key=अक्षय")! 但它返回nil。

我从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=अक्षय

在将URL作为字符串使用时,应将它们编码为URL作为有效的字符串。 编码URL的最流行的例子之一是“”(空格)将被编码为“%20”。

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

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

如您所见, 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
}

请注意,为安全起见,编码字符串和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=अक्षय
}

同样,可选绑定是安全的。

您需要对URL进行编码。

let urlString = "www.mydomain.com/key=अक्षय".addingPercentEncoding(withAllowedCharacters: .urlPathAllowed)
let url = URL(string: urlString!)

let decodedUrl = urlString?.removingPercentEncoding

请记住,您不应该强行打开URL和字符串,而应使用let或guard语句。

试试这个东西:

    let strURL = "www.mydomain.com/key=अक्षय".addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
    let url = URL(string: strURL!)

或者您可以使用:

let strURL = "www.mydomain.com/key=अक्षय".addingPercentEncoding(withAllowedCharacters: .urlPathAllowed)
let url = URL(string: strURL!)

除了显式处理百分比编码,您还可以使用appendingPathComponent构建URL:

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

迅捷3.0

let baseUrl = "www.mydomain.com/key=अक्षय" // base url

let encodedUrl : String! = baseUrl.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed) // remove the spaces in the url string

let typeUrl = URL(string: encodedUrl)! // convert the string into url

print(typeUrl)  // www.mydomain.com/key=%E0%A4%85%E0%A4%95%E0%A5%8D%E0%A4%B7%E0%A4%AF

用于检查目的

if let unwrappedDecodedString = encodedUrl.removingPercentEncoding {
        print(decodedString) // www.mydomain.com/key=अक्षय
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM