如何在没有反斜杠的情况下转义整个字符串?

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 并查看问题是否有变化。