Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: PHP: Не могу настроить кодировку для функции mail()
Форумы портала PHP.SU » » Вопросы новичков » PHP: Не могу настроить кодировку для функции mail()

Страниц (1): [1]
 

1. псаломщик - 30 Сентября, 2011 - 21:15:50 - перейти к сообщению
Написал скрипт для отправки с формы сайта почтового сообщения. Письма отправляются - все доходит. Сложность в том, что тема письма видна в первом и во втором случае, в третьем (с windows-1251) - приходят кракозебры. Тело письма приходит с кракозебрами во всех трех случаях (и в utf-8, и в koi8-r, и в windows-1251). Что поправить?
PHP:
скопировать код в буфер обмена
  1. <?
  2. //сохраняем данные из пост в простые переменные, которые мы выбираем сами
  3. if (isset($_POST['FIO'])) {$FIO =$_POST['FIO']; };
  4. if (isset($_POST['firm'])) {$firm =$_POST['firm'];};
  5. if (isset($_POST['telefon'])) {$telefon=$_POST['telefon']; };
  6. if (isset($_POST['mail'])) {$mail =$_POST['mail']; };
  7. if (isset($_POST['address'])) {$address=$_POST['address']; };
  8. if (isset($_POST['order'])) {$order =$_POST['order']; };
  9. if (isset($_POST['code'])) {$code =$_POST['code']; };
  10. $to='nvf@eq.ru';
  11. $subject='Заказ';
  12. $from='info@myslit.ru';
  13.  
  14. $charset='utf-8';
  15. $subject.=' utf-8';
  16. $subject='=?'.$charset.'?b?'.base64_encode($subjec t).'?=';
  17. $body='Имя: '.$FIO.'\nFirm: '.$firm.'\nPhone: '.$telefon.'\nE-mail: '.$mail."\nAddress: ".$address."\nOrder:\n".$order;
  18. $from='=?'.$charset.'?b?'.base64_encode($from).'?= ';
  19. $headers ="Content-type: text/plain; charset='.$charset.'\r\n";
  20. $headers.='From: <'.$from.'>\r\n';
  21. $headers.='MIME-Version: 1.0\r\n';
  22. $headers.='Date: '.date('D, d M Y h:i:s O').'\r\n';
  23. $headers ="Content-type: text/plain; charset='.$charset.'\r\n";
  24. mail($to,$subject,$body,$headers);
  25.  
  26. $subject='Заказ';
  27. $charset='koi8-r';
  28. $subject.=' koi8-r';
  29. $subject=convert_cyr_string($subject,"w","k");
  30. $subject='=?'.$charset.'?b?'.base64_encode($subjec t).'?=';
  31. $body='Имя: '.$FIO.'\nFirm: '.$firm.'\nPhone: '.$telefon.'\nE-mail: '.$mail."\nAddress: ".$address."\nOrder:\n".$order;
  32. $body=convert_cyr_string($body,"w","k");
  33. $from=convert_cyr_string($from,"w","k");
  34. $headers ="Content-type: text/plain; charset='.$charset.'\r\n";
  35. $headers.='From: <'.$from.'>\r\n';
  36. $headers.='MIME-Version: 1.0\r\n';
  37. $headers.='Date: '.date('D, d M Y h:i:s O').'\r\n';
  38. $headers ="Content-type: text/plain; charset='.$charset.'\r\n";
  39. mail($to,$subject,$body,$headers);
  40.  
  41. $subject='Заказ';
  42. $charset='windows-1251';
  43. $subject.=' windows-1251';
  44. $subject='=?'.$charset.'?b?'.base64_encode($subjec t).'?=';
  45. $body='Имя: '.$FIO.'\nFirm: '.$firm.'\nPhone: '.$telefon.'\nE-mail: '.$mail."\nAddress: ".$address."\nOrder:\n".$order;
  46. $from='=?'.$charset.'?b?'.base64_encode($from).'?= ';
  47. $headers ="Content-type: text/plain; charset='.$charset.'\r\n";
  48. $headers.='From: <'.$from.'>\r\n';
  49. $headers.='MIME-Version: 1.0\r\n';
  50. $headers.='Date: '.date('D, d M Y h:i:s O').'\r\n';
  51. $headers ="Content-type: text/plain; charset='.$charset.'\r\n";
  52. mail($to,$subject,$body,$headers);
  53.  
  54. header('Location: index.php');
  55. ?>

в основном файле кодировка задана через
PHP:
скопировать код в буфер обмена
  1. header('Content-type: text/html; charset=utf-8');
2. caballero - 30 Сентября, 2011 - 21:41:15 - перейти к сообщению
пересохрани файлы в формате UTF-8
и базе пошли SET NAMES UTF-8 если данные оттуда
3. псаломщик - 01 Октября, 2011 - 10:05:47 - перейти к сообщению
caballero, совет оказался по делу. Приведенный выше файл скрипта для формы отправки сообщения был в ANSI. Перевел его в UTF-8 - ситуация зеркально отобразилась - теперь тема сообщения читается только в первом случае (при кодировке UTF-8). В остальных случаях в теме выходят кракозебры. Но беда в том, что в теле письма по-прежнему во всех трех случаях получаются кракозебры...
(Добавление)
Недосып сказывается:
Обратил внимание на кусок кода:
PHP:
скопировать код в буфер обмена
  1.   $headers ="Content-type: text/plain; charset='.$charset.'\r\n";    
  2.   $headers.='From: <'.$from.'>\r\n';
  3.   $headers.='MIME-Version: 1.0\r\n';
  4.   $headers.='Date: '.date('D, d M Y h:i:s O').'\r\n';

Неаккуратно проставленные двойные и одинарные кавычки приводили к тому, что $charset не читалась как переменная PHP, а шла сплошным текстом - в результате кодировка письма вообще проставлена не была. Пришел к этому изучая параметры доставленных писем - в них неправильно ставилась кодировка...

 

Powered by ExBB FM 1.0 RC1