如何在没有反斜杠的情况下转义整个字符串?
How do I escape an entire string without backslashes?
我这里有这个字符串:
let toEscape = "http://localhost:3000/api/Tests/update?where={ \"name\": \(updateText) }"
这个字符串通常没问题,只是我连接的 API 软件 (Strongloop) 似乎不喜欢 \"name\" 处的反斜杠。如何转义整个字符串,这样我就不必在引号前加上反斜杠?在 C# 中,你可以在字符串的开头使用 @ 符号,据说你可以在 Objective-C 中做同样的事情,但我还没有能够在 Swift 中做到这一点,至少不是这样远.
一个可能的解决方案是使用 NSURL(scheme:host:path:) 创建一个 NSURL 并调用 absoluteString() 方法
let escapedString = NSURL(scheme: "http", host: "localhost:3000", path: "/api/Tests/update?where={ \"name\": \(updateText) }")?.absoluteString
编辑:
或更简单
let escapedString = toEscape.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)
简答:是的,请参阅上面的 URL 编码答案。
长答案:也许斜杠不是问题所在。使用 \"
来转义双引号多年来一直是高级语言的标准,并且在 Swift 文档(上面的 link)中被确定为正确的语法。
我确实注意到您的查询参数格式不正确,如果它应该是 JSON。您需要在插值周围加上引号才能使其有效 JSON:
let toEscape = "...?where={ \"name\": \"\(updateText)\" }"
我对 Swift 的经验为零,对 Strongloop 也没有任何经验,但我会先尝试引用 updateText
并查看问题是否有变化。
我这里有这个字符串:
let toEscape = "http://localhost:3000/api/Tests/update?where={ \"name\": \(updateText) }"
这个字符串通常没问题,只是我连接的 API 软件 (Strongloop) 似乎不喜欢 \"name\" 处的反斜杠。如何转义整个字符串,这样我就不必在引号前加上反斜杠?在 C# 中,你可以在字符串的开头使用 @ 符号,据说你可以在 Objective-C 中做同样的事情,但我还没有能够在 Swift 中做到这一点,至少不是这样远.
一个可能的解决方案是使用 NSURL(scheme:host:path:) 创建一个 NSURL 并调用 absoluteString() 方法
let escapedString = NSURL(scheme: "http", host: "localhost:3000", path: "/api/Tests/update?where={ \"name\": \(updateText) }")?.absoluteString
编辑:
或更简单
let escapedString = toEscape.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)
简答:是的,请参阅上面的 URL 编码答案。
长答案:也许斜杠不是问题所在。使用 \"
来转义双引号多年来一直是高级语言的标准,并且在 Swift 文档(上面的 link)中被确定为正确的语法。
我确实注意到您的查询参数格式不正确,如果它应该是 JSON。您需要在插值周围加上引号才能使其有效 JSON:
let toEscape = "...?where={ \"name\": \"\(updateText)\" }"
我对 Swift 的经验为零,对 Strongloop 也没有任何经验,但我会先尝试引用 updateText
并查看问题是否有变化。