按钮不起作用取决于变量的长度

时间:2018-03-13 11:46:11

标签: ios swift

我有一个按钮,当按下它时,它会带你到一个由一些变量组成的网址。所有变量都是一个单词,除了" texto"。

如果" texto"是一个字,一切正常。问题出现在" texto"是一个以上的单词(甚至是单词和空格),按钮不会将您带到网址。

我的代码如下:

@IBAction func pay(_ sender: Any) {

        NSLog("%@", texto);

        let urlString:String = "https://webpage/video.php?user=\(user)&pass=\(pass)&texto=\(texto)&esp=\(espec)&l_origen=\(l_origen)&l_destino=\(l_destino)"

        if let url = URL(string:urlString){
            let svc = SFSafariViewController(url: url)
            self.present(svc, animated: true, completion: nil)
        }
    } 

3 个答案:

答案 0 :(得分:0)

你的字符串应该是百分比编码

这样做

    let urlString:String = "https://webpage/video.php?user=\(user)&pass=\(pass)&texto=\(texto)&esp=\(espec)&l_origen=\(l_origen)&l_destino=\(l_destino)"
    let escapedString = urlString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)

之后使用escapedString从字符串

生成网址
   if let url = URL(string:escapedString){
        let svc = SFSafariViewController(url: url)
        self.present(svc, animated: true, completion: nil)
    }

答案 1 :(得分:0)

使用网址编码方法,因为您无法在网址中使用空格或特殊字符...根据@Duncan C的建议编辑。

let escapedTextTo = texto.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
print("texto = ", escapedTextTo);

let urlString:String = "https://webpage/video.php?user=\(user)&pass=\(pass)&texto=\(escapedTextTo)&esp=\(espec)&l_origen=\(l_origen)&l_destino=\(l_destino)"

if let url = URL(string:urlString){
   ...
}

答案 2 :(得分:0)

正如其他人所说,URL中不允许使用空格。您必须“百分比逃脱”任何包含空格的字段。但是,您不希望百分比转义整个URL,因为这将转义作为URL语法一部分的斜杠,冒号和&符号等字符。

您的代码应如下所示:

@IBAction func pay(_ sender: Any) {

    let escapedTextTo = texto.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
    print("texto = ", escapedTextTo);

    let urlString:String = "https://webpage/video.php?user=\(user)&pass=\(pass)&texto=\(escapedTextTo)&esp=\(espec)&l_origen=\(l_origen)&l_destino=\(l_destino)"

    if let url = URL(string:urlString){
        let svc = SFSafariViewController(url: url)
        self.present(svc, animated: true, completion: nil)
    }
} 


请注意,最好使用URLComponents创建您的网址。它会为您处理URL的各个部分的不同转义规则。