我有一个应用程序,在按钮上单击我传递我的服务器api方法,该方法调用JSON post方法并将数据保存到服务器数据库。这里我将我的手机号码和紧急号码保存到服务器数据库。我的手机号码是在我的手机号码字符串变量中,我的手机号码正在保存,格式为“+ 90-9491491411”。我输入+然后编码然后 - 然后编号但是当我发送到服务器数据库时我正在删除 - 并将no发送到数据库,但问题是在我的服务器数据库+移动中没有输入我正在输入。可能是什么问题。我正在使用POST方法发送请求。这是我的代码
-(void)sendRequest
{
NSString *newstring = txtMobile.text;
mobileValue = [newstring stringByReplacingOccurrencesOfString:@"-" withString:@""];
NSLog(@"%@",mobileValue);
NSString *newString1 = txtemergencyprovider.text;
emergencyNumber = [newString1 stringByReplacingOccurrencesOfString:@"-" withString:@""];
NSLog(@"%@",emergencyNumber);
if ([txtEmail.text isEqualToString:@""])
{
post = [NSString stringWithFormat:@"CommandType=new&ApplicationType=%d&FullName=%@&Mobile=%@&EmergencymobileNumber=%@&Latitude=%f&Longitude=%f&City=%@&MobileModel=Apple",applicationtype,txtFullname.text,mobileValue,emergencyNumber,latitude,longitude,txtCity.text];
NSLog(@"%@",post);
}
else {
post = [NSString stringWithFormat:@"CommandType=new&ApplicationType=%d&FullName=%@&Mobile=%@&EmergencymobileNumber=%@&Latitude=%f&Longitude=%f&City=%@&EmailAddress=%@&MobileModel=Apple",applicationtype,txtFullname.text,mobileValue,emergencyNumber,latitude,longitude,txtCity.text,txtEmail.text];
NSLog(@"%@",post);
}
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSLog(@"%@",postLength);
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"http://myapi?RequestType=NEW"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if (theConnection) {
webData = [[NSMutableData data] retain];
NSLog(@"%@",webData);
}
else
{
}
}
//在我的手机号码和紧急号码变量中,我的号码格式为“+91986444711”,但是当在服务器数据库中输入值时+被删除。可能是概率。
答案 0 :(得分:17)
不幸的是,NSString
的{{1}}不会将加号(-stringByAddingPercentEscapesUsingEncoding:
)转换为+
,因为加号是用于分隔的有效网址字符查询参数。这通常意味着Web服务器将其转换为空格字符。
替换加号的最简单方法是使用%2B
的{{1}}将NSString
替换为stringByReplacingOccurrencesOfString:withString:
。例如:
+
答案 1 :(得分:1)
URL中的加号(“+”)表示编码空间(“”),很可能您的服务器会将其解释为空格。在发布之前,将字符串中的加号字符更改为%2B。有关URL编码的完整解决方案,请参阅此帖子:http://madebymany.com/blog/url-encoding-an-nsstring-on-ios
答案 2 :(得分:0)
加号表示发布请求中的空格。您需要将加号转换为百分比转义字符。最简单的方法如下:
NSString* escapedMobileValue = [mobileValue stringByReplacingOccurencesOfString: @"+" withString: @"%2b"];
这会将+
变为%2b
。服务器可能会自动为您反转编码。
(根据mttrb的评论编辑)