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

时间:2015-06-27 14:11:06

标签: ios swift api strongloop

我在这里有这个字符串:

let toEscape = "http://localhost:3000/api/Tests/update?where={ \"name\": \(updateText) }"

这个字符串通常没问题,除了我连接的API软件(Strongloop)似乎不喜欢\" name \"的反斜杠。如何逃避整个字符串,以便我不必在引号前放入反斜杠?在C#中,您可以在字符串的开头使用@符号,并且据说您可以在Objective-C中执行相同的操作,但我无法在Swift中执行此操作,至少到目前为止还没有。

2 个答案:

答案 0 :(得分:2)

一种可能的解决方案是使用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)

答案 1 :(得分:1)

简短回答:是的,请参阅上面的答案,了解网址编码。

长答案:也许斜杠不是问题。使用\"来转义双引号已经成为高级语言多年的标准,并且在Swift文档中被识别为正确的语法(上面的链接)。

我注意到的是你的查询参数(如果它应该是JSON)是错误的。您需要围绕插值的引号才能使其成为有效的JSON:

let toEscape = "...?where={ \"name\": \"\(updateText)\" }"

我没有Swift的经验,也没有Strongloop的经验,但我会先尝试引用updateText并查看问题是否有所改变。