2010-01-24 2 views
3

Что происходит с русскими буквами при отправке через PHP-запрос на ... почту, например? в "жестко закодированной" москве буквы отображается правильно, но из textboxex формы с иероглифами: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 = "[email protected]"; 
$from = "[email protected]"; 
$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); 

Пользователя ввести некоторое содержимое в текстовом поле : alt text http://lh3.ggpht.com/_1TPOP7DzY1E/S1y6Y0wb9tI/AAAAAAAAC88/OkdMQkO47HQ/s800/works.png

и отправлены на форму.

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

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

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

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

EDIT: используется

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

получает предмет как ÿ - subject with russian letters http://lh6.ggpht.com/_1TPOP7DzY1E/S1zFqFe9ohI/AAAAAAAAC9E/PZ7C4JtEHTU/s800/subject.png

ответ

8

Вы должны base64_encode() свой $subject, как это:

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

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


Этот вопрос также может заинтересовать вас: Is this the correct way to send email with PHP?

+0

сохранил документ PHP как UTF-8 с '$ subject = '=? UTF-8? B?' , base64_encode ($ subject). '? ='; 'теперь все работает! Большое спасибо! – serhio

3

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

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

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

+0

Не забудьте также заголовок электронной почты. –

+0

Вы также должны добавить эту строку в свой скрипт PHP: header ('content-type: text/html; charset: utf-8'); – techexpert

1

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

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

в противном случае это до почтовой программы угадать, вероятно, ошибочно.

+0

Тело письма, вы имеете в виду '$ message'? как я могу добавить эти заголовки? – serhio

+0

Да, '$ message' находится в теле. Вы добавляете заголовки с аргументом 'Additional_headers', так же, как вы устанавливаете' From: '. например. '$ headers =" From: Russian site command \ r \ nMIME-Version: 1.0 \ r \ nContent-Type: text/plain; charset = utf-8 "'. – bobince

Смежные вопросы