我有一个按钮,当按下它时,它会带你到一个由一些变量组成的网址。所有变量都是一个单词,除了" 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)
}
}
答案 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的各个部分的不同转义规则。