我正在尝试创建一个通过POST将密码发送到php网站的应用程序,但我遇到PostData问题。当密码包含&符号它认为变量将被分成两部分。
例如:
以下是PostData
username=testuser&email=email@email.com&password=Pass&word1
^This breaks the password up
这是我的代码:
@try {
NSString *post = [[NSString alloc] initWithFormat:@"username=%@&email=%@&password=%@", usernameField.text, emailField.text, password1Field.text];
NSLog(@"PostData: %@",post);
NSURL *url=[NSURL URLWithString:@"http://mywebsite.com/test/register.php"];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
}
@catch (NSException *exception) {
NSLog(@"Exception: %@", exception);
}
修改
我也意识到像àìú
这样的字母也会引起问题。
答案 0 :(得分:1)
&符号在HTTP请求中具有特殊含义。您需要对这些参数进行URL编码,以确保服务器软件知道它们是数据。
您需要为请求字符串中的每个参数执行类似的操作:
NSString* encodedPassword = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
(CFStringRef)password1Field.text,
NULL,
(CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",
CFStringConvertNSStringEncodingToEncoding(NSUTF8Encoding));
请查看此参考,以获取将URL编码器添加到NSString类的一个很好的示例:http://madebymany.com/blog/url-encoding-an-nsstring-on-ios
至于你的编辑,像àìú这样的字符可能会给你带来问题,因为你正在使用NSASCIIStringEncoding。尝试使用NSUTF8StringEncoding,因为它支持比ASCII更大范围的潜在字符。
答案 1 :(得分:-1)
简单解决方案:使用'|'而不是'&'在您的Objective C代码中。