iOS5: кодировка UTF-8 не работает вообще - PullRequest
0 голосов
/ 03 ноября 2011

Мое приложение может отправлять ввод нескольких текстовых полей в скрипт PHP на моем сервере с помощью функции POST, которая отправляет сообщение на мою электронную почту. Проблема в том, что некоторые символы не будут переведены. Например: ü -> ¼¼.

Я уже проверил свой заголовок HTTP, но он все еще в формате UTF-8.

Я также использую этот код для преобразования символов:

[textFieldName.text stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]

NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversation:YES];

Что я делаю не так? Даже файл PHP имеет такой код:

function mail_utf8($to,$subject = '(No subject)',$message = '',$header = ''){
    $header_ = 'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/plain; charset=UTF-8' . "\r\n";
    if(mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $header_ . $header)) return true;
    else return false;
  }

EDIT:

NSString *post = nil;
            post = [[NSString alloc] initWithFormat:@"vorname=%@&name=%@&plz=%@&ort=%@&email=%@&geburtsdatum=%@&eventdatum=%@",
                    [textFieldVorname.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
                    [textFieldName.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
                    [textFieldPLZ.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
                    [textFieldOrt.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
                    [textFieldEmail.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
                    [textFieldGeburtsdatum.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
                    [textFieldEventdatum.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
            NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
            NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
            NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
            [request setURL:[NSURL URLWithString:@"http://www.url.com/document-send.php"]];
            [request setHTTPMethod:@"POST"];
            [request setValue: postLength forHTTPHeaderField:@"Content-Length"];
            [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
            [request setHTTPBody:postData];
            [NSURLConnection connectionWithRequest:request delegate:self];

Ответы [ 3 ]

2 голосов
/ 03 ноября 2011

Я исправил аналогичную проблему размещения данных JSON, явно добавив charset=utf-8 в мой заголовок Content-Type. Это может относиться и к вашему делу.

Попытка:

[request setValue:@"application/x-www-form-urlencoded;charset=utf-8" forHTTPHeaderField:@"Content-Type"];
1 голос
/ 03 ноября 2011

Метод stringByAddingPercentEscapesUsingEncoding возвращает новый объект NSString. Вам нужно перехватить возвращаемое значение и использовать его вместо необработанного значения поля в данных публикации.

NSString *encodedText = [ textField.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding ] ;
NSData *postData = [ encodedText dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES ] ;
0 голосов
/ 03 ноября 2011

Хорошо, я нашел ошибку:

Как сказал Питер Хоси: ошибка заключалась в декодировании набора символов utf-8 в ISO 8859-1 в php. Теперь это рабочий код:

mail($email_to,$email_subject,utf8_decode($email_data),$email_header);

Спасибо, ребята, что помогли мне:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...