当字段值包含空格或符号时,表单提交错误

时间:2013-04-27 09:25:46

标签: ios objective-c

发送电子邮件时遇到问题。如果消息只有一个单词,代码就可以正常工作。当我添加多个单词,即带有空格或符号时,它会出错“出现连接错误。请确保您已连接互联网并稍后再试”。

- (void)sendAction {

NSString *email = [self.emailTxt text];
NSString *message = [self.messageTxt text];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@?email=%@&message=%@", kITSuggestionPage, email, message]];
NSURLRequest *request = [NSURLRequest requestWithURL:url];

[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
    NSString *title = (!error)? @"Message Sent" : @"Error";
    NSString *message = (!error)? @"Thank you for your Feedback, we hope it will help us to make this product even better." : @"There was an connection error. Please make sure you have internet connection and try again later.";
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:message delegate:nil cancelButtonTitle:@"Close" otherButtonTitles:nil, nil];
    [alert show];

    NSLog(@"Error: %@", error.localizedDescription);
}];


if (email && (email.length > 0)) {
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setObject:email forKey:kITUserEmailKey];
    [userDefaults synchronize];
}
}

2 个答案:

答案 0 :(得分:2)

您必须网址转义您的message参数(基本上会替换带有百分比编码的网址中不允许的某些字符,例如%20表示空间)。

示例(假设您正在使用ARC):

NSString *message = [self.messageTxt text];
message = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)message, NULL, CFSTR("!*'();:@&=+$,/?%#[]"), kCFStringEncodingUTF8));
NSURL *url = ...

答案 1 :(得分:0)

尝试在消息的空格位置添加%20。如果现在工作正常,则问题在于编码。在发送请求之前对您的URL进行编码。

NSString *urlString = [urlString stringByReplacingPercentEscapesUsingEncoding :NSASCIIStringEncoding];

这将对URL进行编码。