Контактная форма Ajax и UTF-8

я использую контактную форму ajax, загруженную с: http://youhack.me/2010/07/22/create-a-fancy-contact-form-with-css-3-and-jquery/

Все работает нормально, кроме UTF, так как я не могу использовать символы кириллицы при отправке.

PHP:

$name = $_POST['name']; // contain name of person
$email = $_POST['email']; // Email address of sender 
$web = $_POST['web']; // Your website URL
$body = $_POST['text']; // Your message 
$receiver = "[email protected]" ; // hardcorde your email address here - This is the email address that all your feedbacks will be sent to 

if (!empty($name) & !empty($email) && !empty($body)) {
    $body = "Name: {$name}\n\nSubject: {$web}\n\nMessage: {$body}";
    $send = mail($receiver, 'Contact from domain.com', $body, "From: {$email}");
    if ($send) {
        echo 'true'; //if everything is ok,always return true , else ajax submission won't work
    }
}

Он использует jquery.validationEngine-en для проверки. В моем html уже есть "Content-Type" content="text/html; charset=utf-8" в заголовке.

Я новичок в php и jquery, поэтому я хотел бы получить некоторые рекомендации, чтобы заставить UTF-8 работать при отправке. Спасибо :)

Редактировать: Когда я пытаюсь использовать кириллические символы (čšćđ) в обязательном поле, я получаю ошибку ввода ajax «Используйте только буквы». Если я отправляю форму с кириллическими символами в необязательном поле, я получаю и отправляю письмо, все письма отображаются нормально, кроме кириллицы, которые выглядят так: Å¡.

Редактировать 2: когда я устанавливаю получателя на gmail (веб-почту), кириллические символы отображаются нормально, за исключением одного поля, где Ajax не позволяет мне их использовать (регулярное выражение из ответа Рейндера).

Когда я устанавливаю получателя в Outlook (локальный) и отправляю форму, ни один из кириллических символов не отображается нормально, например: ÄĹĄ oÄa ĹĄ ÄŽŠÄÄ

РЕШЕНО Спасибо Рейндеру за руководство и Дэвиду! Сегодня разберусь :)


person g5wx    schedule 22.10.2012    source источник
comment
что вы имеете в виду, когда говорите, что UTF8 не работает? Показывает ли он корректность в вашем PHP-коде, когда вы просто его выводите? Электронная почта отображается неправильно?   -  person Reinder Wit    schedule 22.10.2012
comment
когда я пытаюсь отправить со специальными символами (čšćđ), я получаю ошибку проверки ajax: используйте только буквы.   -  person g5wx    schedule 22.10.2012
comment
пожалуйста, обновите свой вопрос комментарием, который вы только что дали;)   -  person Reinder Wit    schedule 22.10.2012
comment
вы используете веб-клиент электронной почты? А что вы увидите, если просто выведете данные с PHP-страницы, а не отправите их по почте?   -  person Reinder Wit    schedule 22.10.2012
comment
Хороший вопрос, я снова обновлю свой вопрос :)   -  person g5wx    schedule 22.10.2012


Ответы (2)


посмотрев на плагин, который вы используете, я думаю, что это связано с регулярным выражением проверки внутри jquery.validationEngine-en.js

когда для проверки установлено значение «onlyLetter», она будет проверяться с использованием

/^[a-zA-Z\ \']+$/

и ни один из ваших персонажей здесь не разрешен...

вам нужно создать javascript проверки языка для используемого вами языка и изменить это регулярное выражение. Например, взгляните на этот пост

Следующее, что нужно сделать, это проверить кодировку вашего файла PHP и ваших заголовков. Поместите это вверху вашего кода PHP

 header("Content-type: text/html; charset=utf-8");

Проверьте, правильно ли отображаются значения при простом выводе их в PHP, например:

echo $name;

Если они правильно отображаются в браузере, и это просто электронная почта, которая неправильно отображает символы, то вам нужно также передать заголовок кодировки электронной почте

пример:

$headers = "From: $name <$email>\n";
$headers .= "Content-Type: text/plain; charset=UTF-8\n";
$body = "Name: {$name}\n\nSubject: {$web}\n\nMessage: {$body}";
$send = mail($receiver, 'Contact from domain.com', $body, $headers);

взгляните на почтовую функцию на веб-сайте PHP.NET.

person Reinder Wit    schedule 22.10.2012
comment
Хороший звонок! Это объясняет сообщение об ошибке ajax. Я думаю, что изменение этого регулярного выражения + отправка почты в utf-8 (используя функцию в моем ответе или подобную ей), вероятно, поможет. - person David John Welsh; 22.10.2012
comment
Да, это имеет смысл, спасибо Рейндер и Дэвид! Может быть, вы знаете, чем мне заменить это регулярное выражение, чтобы оно работало? Опять же, я немного нуб в javascript, и я, вероятно, просто все испорчу :) - person g5wx; 22.10.2012
comment
Теперь Ajax работает - я расширил регулярное выражение до: [a-zA-ZŠČĐĆŽščđćž ']+$ Теперь я могу отправить форму, используя символы, которые являются кириллическими. Так нормально? - person g5wx; 22.10.2012
comment
это определенно сработает, но это не чистое решение, так как вам нужно вручную определить все эти символы. Это для какого поля? Почему бы просто не сделать это обязательным полем? - person Reinder Wit; 22.10.2012
comment
Это для первого поля - имя. Требуется. Все, что мне нужно, это те символы, которые определены в новом регулярном выражении, так что пока все должно быть хорошо :) - person g5wx; 22.10.2012
comment
Здорово! Я буду следовать вашим рекомендациям выше. - person g5wx; 22.10.2012

Вместо того, чтобы использовать функцию PHP mail() по умолчанию, я обнаружил, что это удобно при работе с японским языком:

http://bitprison.net/php_mail_utf-8_subject_and_message

person David John Welsh    schedule 22.10.2012