如何在 Swift 中对搜索输入中的任何字符进行编码?

How do i encode any character in my search input in Swift?

我不确定我是否理解这到底是如何工作的,我正在尝试对用户输入进行百分比编码,因为像 ø、æ、å 和退格键这样的字母经常用于输入。这是我目前的尝试。

    func SearchData(){
        let name = searchText
        // updating page every time...
        let encode = name.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
        let url = "http://xmlopen.rejseplanen.dk/bin/rest.exe/location?input=\(String(describing: encode))&format=json"
        print(url)
        self.vm.SearchData(url: url)
    }
    
}

vadians 在下面回答的最终解决方案。

   func searchData(){
        // updating page every time...
        let encode = searchText.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
        let url = "http://xmlopen.rejseplanen.dk/bin/rest.exe/location?input=\(encode)&format=json"
        print(url)
        self.vm.searchData(url: url)
    }

首先你误用了String(describing。它不修复失败的百分比编码。

第二个百分比编码与 URL 的 query 部分相关,而不是 host.

以小写字母开头的所有名称函数中的第三个

强制展开编码字符串是安全的,因为搜索字段的内容始终在可编码字符的范围内。

func searchData(){
    // updating page every time...
    let encode = searchText.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
    let url = "http://xmlopen.rejseplanen.dk/bin/rest.exe/location?input=\(encode))&format=json"
    print(url)
    self.vm.SearchData(url: url)
}

一个合适的替代方案是 URLComponentsURLQueryItem,它们可以正确编码字符串。