如何在NSURL字符串中包含花括号?

时间:2015-06-27 00:04:17

标签: ios swift url

我有以下代码,但NSURL不喜欢花括号。它崩溃了。如果我在&#34之后在字符串前加上一个@符号格式:"它什么都不做。如果我试图使用\来逃避括号,它就不起作用了。我如何使这项工作?

func getUrlWithUpdateText(updateText: String!) -> NSURL {
    let escapedUpdateText = updateText.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!
    let urlString = String(format: "http://localhost:3000/api/Tests/update?where={ \"name\": %@ }", escapedUpdateText)
    let url = NSURL(string: urlString)
    return url!
}

我意识到还有另一个类似的线程,但它并没有转化为这种情况,因为有一件事是Swift,而不是Objective-C。

2 个答案:

答案 0 :(得分:1)

一旦构建完毕,就逃避一切:

func getUrlWithUpdateText(updateText: String) -> NSURL? {
    let toEscape = "http://localhost:3000/api/Tests/update?where={ \"name\": \(updateText) }"
    if let escapedUpdateText = toEscape.stringByAddingPercentEncodingWithAllowedCharacters(
        NSCharacterSet.URLHostAllowedCharacterSet()),
       url = NSURL(string: escapedUpdateText) {
        return url
    }
    return nil
}

用法:

if let res = getUrlWithUpdateText("some text #%$") {
    print(res)
} else {
    // oops, something went wrong with the URL
}

答案 1 :(得分:0)

由于大括号位于URL中,您可以通过将大括号视为HTML实体来处理此问题。有关详细信息,请参阅How do I decode HTML entities in swift?