如何使用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您可以建议一些如何解决此问题的参考链接吗。。。可能会有帮助。评论不用于长时间讨论;这段对话已经结束。