w Obj-C tak przesyłam dane do PHP
- (IBAction)registerClicked:(id)sender { @try { NSString *password = [_txtPassword text]; NSString *password2 = [_txtPassword2 text]; NSString *email = [_txtEmail text]; if([[_txtName text] isEqualToString:@""] || [[_txtSurname text] isEqualToString:@""] || [email isEqualToString:@""] || [password isEqualToString:@""] || [password2 isEqualToString:@""]) { [self alertStatus:@"Proszę uzupełnić wszystkie pola" :@"Brak wypełnionych wszystkich pól"]; } else if (![password isEqualToString:password2]) { [self alertStatus:@"Wpisane hasła różnią się od siebie" :@"Niezgodność haseł"]; } else if (password.length < 4) { [self alertStatus:@"Hasło musi zawierać minimum 4 znaki" :@"Zbyt krótkie hasło"]; } else if (![self validEmail:email]) { [self alertStatus:@"Adres e-mail jest nieprawidłowy" :@"Nieprawidłowy adres e-mail"]; } else { //salt the password NSString* saltedPassword = [NSString stringWithFormat:@"%@%@", password2, kSalt]; //prepare the hashed storage NSString* hashedPassword = nil; unsigned char hashedPasswordData[CC_SHA1_DIGEST_LENGTH]; //hash the pass NSData *data = [saltedPassword dataUsingEncoding: NSUTF8StringEncoding]; if (CC_SHA1([data bytes], [data length], hashedPasswordData)) { hashedPassword = [[NSString alloc] initWithBytes:hashedPasswordData length:sizeof(hashedPasswordData) encoding:NSASCIIStringEncoding]; } else { [self alertStatus:@"Wystąpił problem - zamknij aplikację i spróbuj raz jeszcze" :@"Nieoczekiwany błąd"]; return; } NSString *post =[[NSString alloc] initWithFormat:@"name=%@&surname=%@&email=%@&password=%@", [_txtName text],[_txtSurname text], email, hashedPassword]; NSLog(@"PostData: %@",post); NSURL *url=[NSURL URLWithString:@"http://localhost/test"]; NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; NSString *postLength = [NSString stringWithFormat:@"%d", [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]; // dla https [NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[url host]]; NSError *error = [[NSError alloc] init]; NSHTTPURLResponse *response = nil; NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; NSLog(@"Odpowiedź serwera: %d", [response statusCode]); if ([response statusCode] >=200 && [response statusCode] <300) { NSString *responseData = [[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding]; NSLog(@"Response ==> %@", responseData); SBJsonParser *jsonParser = [SBJsonParser new]; NSDictionary *jsonData = (NSDictionary *) [jsonParser objectWithString:responseData error:nil]; NSLog(@"%@",jsonData); NSInteger success = [(NSNumber *) [jsonData objectForKey:@"success"] integerValue]; NSLog(@"%d",success); if(success == 1) { NSLog(@"Zarejestrowano poprawnie"); [self alertStatus:@"Odbierz wiadomość e-mail i potwierdź adres" :@"Dziękujemy!"]; RegisterFormViewController *account = [self.storyboard instantiateViewControllerWithIdentifier:@"login"]; [self presentViewController:account animated:YES completion:nil]; } else { NSString *error_msg = (NSString *) [jsonData objectForKey:@"error_message"]; [self alertStatus:error_msg :@"Błąd rejestracji!"]; } } else { if (error) NSLog(@"Error: %@", error); [self alertStatus:@"Sprawdź połączenie z internetem!" :@"Błąd rejestracji!"]; } } } @catch (NSException * e) { NSLog(@"Exception: %@", e); [self alertStatus:@"Wystąpił błąd." :@"Błąd rejestracji!"]; } }
i później PHP to waliduje i wrzuca do bazy...
problem w tym, że w konsoli Xcode widzę, że wychodzą dane z polskimi znakami.
2012-11-01 20:07:24.115 test[10073:c07] PostData:name=ąśśśćłłóóó &surname=łłóóóśśćć&email=lllll@wp.pl&password=VÉ{¡TaªNB÷Ug¦·û
a w bazie zamiast "ł" jest "?"
zamiast "ó" jest "o"
zamiast "ś" jest "s"
zamiast "ć" jest "c"
w php ustawiłem kodowanie w nagłówku.
header("Content-Type: application/json; charset=utf-8");
oraz podczas łączenia się z bazą:
//ustaw znaki mysql_query("SET NAMES utf8", $con) or die(mysql_error()); mysql_query("SET CHARACTER SET utf8", $con) or die(mysql_error()); mysql_query("SET collation_connection = utf8_polish_ci", $con) or die(mysql_error());
baza jest w UTF-8 collaction też w UTF-8
o co chodzi?