如何使用swift在iOS中添加特殊字符? 我想给iOS一个新的数据,我想把一些数据发送到服务器,但是我不能发送莫比尔号码 >代码> + 91 和血型 >代码> A+ ..它被发送到FiasBase +被替换为空间 >“ >此代码>(91)和(a)< /代码>

如何使用swift在iOS中添加特殊字符? 我想给iOS一个新的数据,我想把一些数据发送到服务器,但是我不能发送莫比尔号码 >代码> + 91 和血型 >代码> A+ ..它被发送到FiasBase +被替换为空间 >“ >此代码>(91)和(a)< /代码> ,ios,swift,firebase,Ios,Swift,Firebase,功能转换器参数 func convertToParameters(_ params: [String: AnyObject?]) -> String { var paramList: [String] = [] for (key, value) in params { guard let value = value else { continue }

功能转换器参数

  func convertToParameters(_ params: [String: AnyObject?]) -> String {
        var paramList: [String] = []

        for (key, value) in params {
            guard let value = value else {
                continue
            }
           let scapedKey = key
           let scapedValue = value
            print("employee add status objects   =   ","\(scapedKey)=\(scapedValue as AnyObject)")
            paramList.append("\(scapedKey)=\(scapedValue as AnyObject)")
        }
        return paramList.joined(separator: "&")
    }
Json错误:

resultjson=two   :  {
    error =     {
        code = "auth/invalid-phone-number";
        message = "The phone number must be a non-empty E.164 standard compliant identifier string.";
    };
    success = 0;
}
firebase控制台中出现错误:

resultjson=two   :  {
    error =     {
        code = "auth/invalid-phone-number";
        message = "The phone number must be a non-empty E.164 standard compliant identifier string.";
    };
    success = 0;
}

您的实际问题是您的参数没有得到正确的url编码

代码的临时解决方案:

convertToParams
方法中,进行以下更改:

let scapedKeyEncoded =  scapedKey.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed);
let scapedValueEncoded =  scapedValue.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed);
paramList.append("\(scapedKeyEncoded)=\(scapedValueEncoded)"
注意:您的scapedValue必须是String,因此,将employeeDetails设置为[String:String]

永久解决方案(编码查询参数的完美方式):

resultjson=two   :  {
    error =     {
        code = "auth/invalid-phone-number";
        message = "The phone number must be a non-empty E.164 standard compliant identifier string.";
    };
    success = 0;
}
为此,您可以将代码更改为以下内容:

  • 删除
    convertToParameters
    方法
  • 添加以下方法来代替它

    class func getURLRequestWith(urlStr:String, paramsDict:[String:String]?, isParamsAsQuery:Bool, isParamsAsBody:Bool) -> URLRequest? {
    
    guard var components = URLComponents(string: urlStr) else { return nil }
    
    if paramsDict != nil{
        components.queryItems = paramsDict!.map({ (key, value) -> URLQueryItem in
            return URLQueryItem(name: key, value: value)
        })
    }
    
    if isParamsAsQuery{
        let request = URLRequest(url: components.url!);
        return request;
    }
    
    if isParamsAsBody{
        let url = URL(string: urlStr);
        var request = URLRequest(url: url!);
    
        let bodyStr = components.percentEncodedQuery;
        if bodyStr != nil{
            request.httpBody = bodyStr!.data(using: String.Encoding.utf8);
        }
        return request;
    }
    
    let url = URL(string: urlStr);
    let request = URLRequest(url: url!);
    return request;
    }
    
  • 从代码中删除以下行:

    let convertedvalue : String = convertToParameters(employeeDetails)
    
    print("convertedvalues :   \(convertedvalue)")
    
    
    let myUrl = URL(string: "https://us-central1-pickceltest.cloudfunctions.net/rebliss/createNewUser");
    
    var request = URLRequest(url:myUrl!)
    request.httpBody = postString.data(using: String.Encoding.utf8);
    
  • 添加以下代码,而不是上面删除的代码

    let urlStr = "https://us-central1-pickceltest.cloudfunctions.net/rebliss/createNewUser"
    
    var request = getURLRequestWith(urlStr: urlStr, paramsDict: employeeDetails, isParamsAsQuery: false, isParamsAsBody: true)
    
  • employeeDetails
    字典转换为类型
    [String:String]
    ,而不是
    [String:AnyObject]


  • 现在,试试你的代码,它肯定会工作。

    请检查下面的解决方案是否有效。向url添加百分比编码

    // Create NSURL Ibject
    let url : NSString = urlWithParams as NSString
    
    let urlStr = url.addingPercentEncoding( withAllowedCharacters: .urlQueryAllowed)
    
    let searchURL : NSURL = NSURL(string: urlStr! as String)!
    
    // Creaste URL Request
    let request = NSMutableURLRequest(url: searchURL as URL, cachePolicy: NSURLRequest.CachePolicy.reloadIgnoringCacheData, timeoutInterval: 120)
    
    // Set request HTTP method to GET. It could be POST as well
    request.httpMethod = "POST"
    

    您需要显式地对
    +
    符号进行百分比编码,否则它会被解释为一个空格–您可以阅读更多关于它的内容(扰流板:它不进行百分比编码)@holex您可以建议一些如何解决此问题的参考链接吗。。。可能会有帮助。评论不用于长时间讨论;这段对话已经结束。