将包含 URL 的字符串发布到服务器会截断 & 之后的所有内容

Posting string containing URL to server truncates everything after &

我正在使用 swift 将包含 URL(url 编码)的字符串发布到服务器,并将 url 格式化如下。

url = "http://something.com/?blah=blah&stuff=stuff"
url = url.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)

但是 url 中 & 之后的所有内容都被切断了。所以我像下面这样破解它。

url = url!.stringByReplacingOccurrencesOfString("&", withString:"FLAGABC123");

必须有更好的方法来做到这一点,我们将不胜感激任何建议。

正在使用以下方式发布请求:

var request = NSMutableURLRequest(URL: nsurl!, cachePolicy: cachePolicy, timeoutInterval: 2.0)
request.HTTPMethod = "POST"
let params = "path=(path)"
let http_body = params.dataUsingEncoding(NSUTF8StringEncoding)
request.HTTPBody = http_body
let session = auth.sessionWithAuth(email, password: "")
let task = session.dataTaskWithRequest(request, completionHandler:{(dataObject, response, error) in

首先,percentEscapes 用于 url 编码。 url 中允许使用 & 符号。您正在尝试传递一个带有 & 作为 post 数据中的值的字符串。但是,在服务器端,& 被解析为表示另一个键和值正在开始。

那么你想要的是HTML编码,而不是url编码。 Swift 没有执行此操作的内置函数,但我想您可以创建自己的函数。对于&符号,您只需将其替换为 &

url = url!.stringByReplacingOccurrencesOfString("&", withString:"&");