How to escape the HTTP params in Swift

前端 未结 2 1698
独厮守ぢ
独厮守ぢ 2020-12-17 04:28

I\'m trying to make a post to an HTTP server

By the way this is my code:

  func sendPostToUrl(url:String, withParams params: [String: String?] ) {
          


        
2条回答
  •  孤街浪徒
    2020-12-17 04:44

    If you can target iOS 8 (thanks @Rob), use NSURLComponents to escape your parameters instead:

    import Foundation
    
    func encodeParameters(#params: [String: String]) -> String {
        var queryItems = map(params) { NSURLQueryItem(name:$0, value:$1)}
        var components = NSURLComponents()
        components.queryItems = queryItems
        return components.percentEncodedQuery ?? ""
    }
    

    Now encodeParameters(params:["hello":"world","inject":"param1=value1¶m2=value2"]) returns hello=world&inject=param1%3Dvalue1%26param2%3Dvalue2 as you would expect.

    Otherwise, the best way to create the character set that will let you escape your values properly is this:

    var safeCharacterSet = NSCharacterSet.URLQueryAllowedCharacterSet().mutableCopy()
    safeCharacterSet.removeCharactersInString("&=")
    

    and see @rintaro's answer to use filter/map properly to perform the encoding in a nice way.

提交回复
热议问题