2013-04-27 82 views
0

我在發送電子郵件時遇到問題。如果消息只有一個單詞,代碼工作得很好。當我添加多個單詞時,即使用空格或符號時,它會錯誤地顯示「出現連接錯誤,請確保您連接到互聯網,然後再試一次」。字段值包含空格或符號時提交表單錯誤

- (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

你必須URL轉義message參數(未在網址中不允許有百分之編碼,例如%20空間基本取代某些字符)。

實例(假設你使用ARC):

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

太好了!非常感謝! – Steve 2013-04-27 14:36:14

0

嘗試在消息的空格位置添加%20。如果現在工作正常,那麼問題在於編碼。在發送請求之前對您的URL進行編碼。

NSString *urlString = [urlString stringByReplacingPercentEscapesUsingEncoding :NSASCIIStringEncoding]; 

這將對URL進行編碼。

+0

的這個問題的夫婦:1)錯誤的方向 - 'stringByReplacingPercentEscapesUsingEncoding:'*會*解碼的URL,而不是編碼。 2)如果消息包含'&'字符(在URL中允許,但打破參數字符串),將不起作用。3)不能用任何不能用ASCII表示的內容(變音器等) – omz 2013-04-27 09:40:00

+0

好的,如此那麼你有什麼建議嗎? – Steve 2013-04-27 09:46:49

+0

任何人都有這方面的解決方案,真的很感激這一點。 – Steve 2013-04-27 10:42:53