2010-03-24 193 views
1

我需要提交一个带有“+”标志的电子邮件地址并在服务器上进行验证。但服务器收到的电子邮件如“[email protected]”为“aaa [email protected]”。用“+”号登录电子邮件地址

我发送所有数据作为POST请求与下面的代码编码之前

NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@", url, @"/signUp"]]; 

NSString *post = [NSString stringWithFormat:@"&email=%@&userName=%@&password=%@", 
         user.email, 
         user.userName, 
         user.password]; 

NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:NO]; 

NSData* data = [self sendRequest:url postData:postData]; 

交可变编码它是相同

&[email protected]&userName=Asdfasdfadsfadsf&password=sdfasdf 

方法I使用后具有值

&[email protected]&userName=Asdfasdfadsfadsf&password=sdfasdf 

发送请求看起来像下面的代码:

-(id) sendRequest:(NSURL*) url postData:(NSData*)postData { 
    // Create request 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 

    NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]]; 

    [request setURL:url]; 
    [request setHTTPMethod:@"POST"]; 
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Current-Type"]; 
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
    [request setHTTPBody:postData]; 

    NSURLResponse *urlResponse; 

    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:nil]; 

    [request release]; 

    return data; 
} 
+1

我不是100%肯定,但你可能要考虑的NSString的'stringByAddingPercentEscapesUsingEncoding:'@格雷格 – greg 2010-03-24 16:05:08

+0

:哇,这是一个方法名称。 – Gumbo 2010-03-24 16:07:07

回答

1

+正在被HTTP服务器作为空间转义。

您需要通过调用CFURLCreateStringByAddingPercentEscapes

0

您需要进行urlencode的加号,以躲避+%2B。它必须变成%2B让接收者认为它是一个加号。

6

电子邮件,用户名和密码需要-stringByAddingPercentEscapesUsingEncoding:转义。

NSString *post = [NSString stringWithFormat:@"&email=%@&userName=%@&password=%@", 
        [user.email stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding], 
        ... 

但是,这不会逃过+,因为它是一个有效的URL字符。您可以使用更sophiscated CFURLCreateStringByAddingPercentEscapes,或简单,只需更换所有+通过%2B

NSString *post = [NSString stringWithFormat:@"&email=%@&userName=%@&password=%@", 
        [[user.email stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] 
        stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"], ... 
相关问题