我正努力在我的一个Swift项目中压制一些恼人的错误。我想知道是否有办法通过HTTP传输表情符号,这样我的服务器端代码就可以保存表情符号数据供以后检索。问题是,当请求被制定时,应用程序将在创建NSURL / NSURLSession(不确定哪一个)时是否会崩溃,如果它包含表情符号。
有什么方法可以让我的应用程序在插入表情符号时不会崩溃,还是有专门的方式我可以在HTTP请求中使用Emojis?
Alamofire.request(.POST, "removed/api.php?request=setBio&identification=" + identification + "&bio=" + content).responseJSON { response in
if let jsonStr = response.result.value {
let jsonObj = JSON(jsonStr)
print ("response for bio update: \(jsonObj["response"])")
self.user.bio = self.bioField.text!
}
}
如果"内容"字符串包含一个表情符号,它会崩溃。 Alamofire通过NSUrlSession运行一切。
Alamofire发生了崩溃(显然它在解开一个可选值时发现为零,不知道为什么。文字不是。)
let mutableURLRequest = NSMutableURLRequest(URL: NSURL(string: URLString.URLString)!)
答案 0 :(得分:1)
找到一个非常简单的解决方案!
只需将其添加到内容变量:
.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLPathAllowedCharacterSet())!
并且您将能够发送带有表情符号的请求。
答案 1 :(得分:1)
你应该让Alamofire做出必要的百分比逃避请求:
let parameters = ["request": "setBio", "identification": identification, "bio": content]
Alamofire.request(.POST, "removed/api.php", parameters: parameters, encoding: .URLEncodedInURL)
.responseJSON { response in
if let jsonStr = response.result.value {
// ...
}
}
坦率地说,我上面使用了ParameterEncoding.URLEncodedInURL
,因为在原始示例中,您将这些参数放在URL中。但是,通常会在POST
个请求中将这些参数包含在请求正文中,通过省略encoding
参数来实现,或者通过使用{{1}来解决一些令人困惑/矛盾的问题。 } encoding
。在请求正文中包含参数更为习惯,更安全。但是,如果确实必须在网址中包含这些参数,请为ParameterEncoding.URL
提供.URLEncodedInURL
值。
但关键信息是Alamofire已经知道如何正确地百分比转义参数,所以让它这样做,而不是自己手动构建URL或encoding
。并且,作为警告,其他技术(例如NSURLRequest
(包括stringByAddingPercentEncodingWithAllowedCharacters
)或URLPathAllowedCharacterSet
等字符集不仅不那么直接,而且还无法正确地逃脱某些请求(尽管他们使用表情符号)。无论如何,让Alamofire处理这个问题会更好,因为它可以正确地逃脱。