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

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

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
псаломщик
Отправлено: 30 Сентября, 2011 - 21:15:50
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




Написал скрипт для отправки с формы сайта почтового сообщения. Письма отправляются - все доходит. Сложность в том, что тема письма видна в первом и во втором случае, в третьем (с 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');
 
 Top
caballero
Отправлено: 30 Сентября, 2011 - 21:41:15
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




пересохрани файлы в формате UTF-8
и базе пошли SET NAMES UTF-8 если данные оттуда


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
псаломщик
Отправлено: 01 Октября, 2011 - 10:05:47
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




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, а шла сплошным текстом - в результате кодировка письма вообще проставлена не была. Пришел к этому изучая параметры доставленных писем - в них неправильно ставилась кодировка...
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB