在iphone中使用url编码使用%2b之前添加+

时间:2012-04-10 08:39:23

标签: iphone objective-c

我有一个应用程序,在按钮上单击我传递我的服务器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”,但是当在服务器数据库中输入值时+被删除。可能是概率。

3 个答案:

答案 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的评论编辑)