Iphone a「+&引用;登录电子邮件地址

Iphone a「+&引用;登录电子邮件地址,iphone,objective-c,iphone-sdk-3.0,Iphone,Objective C,Iphone Sdk 3.0,我需要在服务器上提交一个带有“+”签名和验证的电子邮件地址。但服务器会收到类似“aaa”的电子邮件+bbb@mail.com“作为”aaabbb@mail.com” 我以POST请求的形式发送所有数据,代码如下 NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@", url, @"/signUp"]]; NSString *post = [NSString stringWithFormat:@"&ema

我需要在服务器上提交一个带有“
+
”签名和验证的电子邮件地址。但服务器会收到类似“
aaa”的电子邮件+bbb@mail.com
“作为”
aaabbb@mail.com

我以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];
编码前的post变量具有值

&email=aaa+bbb@gmail.coma&userName=Asdfasdfadsfadsf&password=sdfasdf
编码后,它是相同的

&email=aaa+bbb@gmail.coma&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;
}

HTTP服务器正在取消将
+
替换为空间


您需要通过调用
CFURLCreateStringByAddingPercentEscapes将
+
转义为
%2B
,HTTP服务器正在将
+
取消转义为空间


您需要通过调用
cfurlcreateStringByAddingPercentesEscapes将
+
转义为
%2B
,您需要对加号进行URL编码。它必须变成
%2B
,接收者才会认为它是加号。

您需要对加号进行URL编码。它必须变成
%2B
,接收者才会认为它是加号。

电子邮件、用户名和密码需要通过
-stringByAddingPercentEscapesUsingEncoding:
转义

NSString *post = [NSString stringWithFormat:@"&email=%@&userName=%@&password=%@",
                  [user.email stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
                  ...
但是,这不会转义
+
,因为它是一个有效的URL字符。您可以使用更复杂的
cfurlCreateStringByAddingPercentescape
,或者为了简单起见,只需将所有
+
替换为
%2B

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

电子邮件、用户名和密码需要通过
-stringByAddingPercentEscapesUsingEncoding:
转义

NSString *post = [NSString stringWithFormat:@"&email=%@&userName=%@&password=%@",
                  [user.email stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
                  ...
但是,这不会转义
+
,因为它是一个有效的URL字符。您可以使用更复杂的
cfurlCreateStringByAddingPercentescape
,或者为了简单起见,只需将所有
+
替换为
%2B

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

我不是100%确定,但您可能想通过添加百分比转义usingencoding:
@greg:Wow,这是一个方法名。我不是100%确定,但您可能想查看NSString的
stringByAddingPercentEscapesUsingEncoding:
@greg:Wow,这是一个方法名。