PHP и русские буквы - PullRequest
       40

PHP и русские буквы

3 голосов
/ 25 января 2010

Что происходит с русскими буквами при отправке через PHP-запрос на ... почту, например?«жестко закодированные» русские буквы отображаются правильно, но из текстового поля формы с иероглифами:

HTML-страница:

<tr>
 <td style="width: 280px">Содержание работ</td>
 <td><input type="text" id="workContent"/></td>
</tr>

Страница PHP:

$WorkContent = $_REQUEST["workContent"]; //Содержание работ
// ...
$WorkContentLabel = "Содержание работ";
// ...
$message .= $WorkContentLabel . ":\t" . $WorkContent . "\n";
// ...
// email stuff (data below changed)
$to = "test@gmail.com";
$from = "me@domain.com";
$from_header = "From: Russian site command ";

$subject = "Message with russian letters";
$subject = '=?utf-8?B?'.$subject.'?=';
$message .= $subject;

// send message
mail($to, $subject, $message, $from_header);

Вход пользователянекоторый контент в текстовом поле: альтернативный текст http://lh3.ggpht.com/_1TPOP7DzY1E/S1y6Y0wb9tI/AAAAAAAAC88/OkdMQkO47HQ/s800/works.png

и отправка формы.

Что я получу (в GMAIL):

Содержание работ:       1)Содержание 2)RABOT

Итак, в жестком коде русский текст - ОК, , отправленный формой русский текст - NOK , отправленный формой ASCII text - OK.

Кто-нибудь знает, что может быть причиной такого странного поведения с кодировкой?

EDIT: used

$subject = "  оборудования  - subject with russian letters";
$subject = '=?UTF-8?B?' . base64_encode($subject) . '?=';
$message .= $subject;

получает объект, подобный ����������� ÿ - тема с русскими буквами http://lh6.ggpht.com/_1TPOP7DzY1E/S1zFqFe9ohI/AAAAAAAAC9E/PZ7C4JtEHTU/s800/subject.png

Ответы [ 3 ]

9 голосов
/ 25 января 2010

Вам нужно base64_encode() ваше $subject, вот так:

$subject = '=?UTF-8?B?' . base64_encode($subject) . '?=';

Убедитесь, что вы также сохраняете файл .php с кодировкой UTF-8 без спецификации .


Этот вопрос также может вас заинтересовать: Это правильный способ отправки электронной почты с помощью PHP?

3 голосов
/ 25 января 2010

Проверьте ваши кодировки:

  1. HTML-кодировка (в теге <meta http-equiv..>)
  2. Кодировка файла PHP / HTML / шаблона (в какой кодировке ваш редактор сохраняет файл)
  3. Кодировка базы данных (если применимо) (в какой кодировке находятся данные в таблицах)
  4. Кодировка подключения к базе данных (если применимо) (какая кодировка используется для подключений к базе данных)

и используйте UTF-8 для всего.

1 голос
/ 25 января 2010

В дополнение к тому, что Аликс сказал о base64 в кодированном слове RFC2047 в строке «Тема», вам также нужно сообщить почтовой программе, что нужно ожидать текст в кодировке UTF-8 в теле письма, добавив заголовки:

MIME-Version: 1.0
Content-Type: text/plain;charset=utf-8

В противном случае почтовый ящик должен угадать, вероятно, неправильно.

...