我试图以这种方式使用NSURL
字符串:
var name = "Unknown Name"
let SearchString = "http://xxx?name=\(name)"
let SearchURL = NSURL(string: SearchString)
但是,SearchURL
变为零并抛出异常,因为"Unknown"
和"Name"
之间有空格
我想在name
变量的开头和结尾添加单引号,但我不能这样做,因为我执行了以下操作:
let SearchString = "http://xxx?name='\(name)'"
当我在调试器中跟踪SearchString时,我发现它包含以下内容:
http://xxx?name=\'Unknown Name\'
并再次抛出异常。
如何删除这些奇怪的反斜杠并仅使用单引号,以便我可以使用URL
。
答案 0 :(得分:2)
听起来你需要对name
中的空格进行编码。您可以使用stringByAddingPercentEncodingWithAllowedCharacters
URLQueryAllowedCharacterSet
来执行此操作(并对其他特殊字符进行编码)
var name = "Unknown Name".stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())!
...
请注意!
的不安全性 - 如果stringByAddingPercentEncodingWithAllowedCharacters
返回nil
则会发生崩溃
答案 1 :(得分:1)
从iOS 7开始,NSString类中有一个方法stringByAddingPercentEncodingWithAllowedCharacters。该方法通过将所有不在指定集合中的字符替换为百分比编码字符来返回从接收方生成的新字符串。
var originalString = "Unknown Name"
var escapedString = originalString.stringByAddingPercentEncodingWithAllowedCharacters(.URLQueryAllowedCharacterSet())
println("escapedString: \(escapedString)")
URLQueryAllowedCharacterSet包含URL查询字符串的所有允许字符。
输出:
Unknown%20Name
所以将代码更改为
var name = "Unknown Name"
var escapedName = name..stringByAddingPercentEncodingWithAllowedCharacters(.URLQueryAllowedCharacterSet())
let SearchString = "http://xxx?name=\(escapedName)"
let SearchURL = NSURL(string: SearchString)
应该做的伎俩