[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите новичку: проблемы кодировки, при отправке
ipumov
Только осваиваю PHP поэтому прошу помочь разобраться.

Пытаюсь отправить письмо через функцию mail – письмо отправляется, но когда я его получаю вижу «одни ероглифы». Текст корректно не может отобразить ни один почтовый клиент (Outlook, Mozilla Thunderbird) и даже веб интерфейс почты.

Что нужно дописать чтобы кодировка начала отображаться корректно?

Образец срипта написал ниже.

Впишите чего там не хватает, и скиньте пожалуйста ответ в сообщении, а то самому мне сложно пока ((


Свернутый текст
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<
html>
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<
title>Untitled Document</title>
</
head>

<
body>

<?php

$headers = 'From: Тема сообщения <mail@xxx.ru>' . "\r\n" .
'Reply-To: mail@xxx.ru' . "\r\n" .
'Content-type: text/plain; charset=\"windows-1251\"'. "\r\n".
'X-Mailer: PHP/' . phpversion();

mail("$pochta","Ваш заказ на start-plan.ru",
"Здравствуйте $name $otcgestvo.

Вы сделали заказ.

Когда он будет отправлен, то вы будите извещены по указанному вами E-mail адресу:
$pochta

Спасибо за заказ!", $headers);

?>

Благодарим за заполнение заявки.

</
body>
</
html>


 ! 

М
Обрамляйте код тегами !
PHPprogrammer




Спустя 1 час, 17 минут, 46 секунд (26.07.2011 - 11:28) Invis1ble написал(а):
ipumov
попробуй закодировать тело сообщения и тему в base64 и добавить соответственно заголовок Content-Transfer-Encoding
собственно, вот тут советую почитать

Спустя 31 минута, 2 секунды (26.07.2011 - 11:59) Winston написал(а):
В какой кодировке файл?
Такую же кодировку и здесь
Цитата
charset=\"windows-1251\"'

нужно прописать

Спустя 3 часа, 59 минут, 42 секунды (26.07.2011 - 15:59) killer8080 написал(а):
Цитата (ipumov @ 26.07.2011 - 10:10)
'Content-type: text/plain; charset=\"windows-1251\"'

здесь не нужно экранировать кавычки.

Спустя 21 час, 45 минут, 33 секунды (27.07.2011 - 13:44) ipumov написал(а):
Сделал как написано тут http://irbis-team.com/15/12

В итоге с кодировкой проблемы решились.

Но почему-то перестали подставляться переменные из формы: переменная $pochta (тестовое поле) и $imy $otcgestvo (тестовые поля) из формы обратной связи.

Вот что получилось:


<?php

$to = '$pochta';
$from = 'mail@yandex.ru';
$subject = 'Ваш заказ';
$subject = '=?utf-8?b?'. base64_encode($subject) .'?=';
$headers = "Content-type: text/plain; charset=\"utf-8\"\r\n";
$headers .= "From: <". $from .">\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Date: ". date('D, d M Y h:i:s O') ."\r\n";
$message = 'Здравствуйте $imy $otcgestvo. Вам письмо';

mail($to, $subject, $message, $headers);

?>


В итоге письмо в Денвере формируется вот такое письмо:

user posted image

В чём может быть дело?

Спустя 1 час, 23 минуты, 9 секунд (27.07.2011 - 15:07) Guest написал(а):
$message = 'Здравствуйте'"$imy"."$otcgestvo"' Вам письмо';

что то вроде этого помоему должно быть

Спустя 16 минут, 42 секунды (27.07.2011 - 15:24) killer8080 написал(а):
нужно так
$message = 'Здравствуйте '.$imy.' '.$otcgestvo.'. Вам письмо';
или так
$message = "Здравствуйте $imy $otcgestvo. Вам письмо";

Спустя 6 секунд (27.07.2011 - 15:24) kristall написал(а):
В присвоении $message поменяй одинарные кавычки на двойные.

Спустя 51 минута, 23 секунды (27.07.2011 - 16:16) ipumov написал(а):
нужно так
$message = 'Здравствуйте '.$imy.' '.$otcgestvo.'. Вам письмо';
или так
$message = "Здравствуйте $imy $otcgestvo. Вам письмо";


Пробовал оба способа. Итог: переменные написанные в поле ввода формы на латинице отображаются, а переменные на кириллице просто не видно (пустое место остается).

user posted image

Есть мысли, что не так?

P.S. файл .php сохраняю через NPP++ в кодировке UTF-8 (без BOM)

Спустя 9 минут, 17 секунд (27.07.2011 - 16:25) Winston написал(а):
Цитата (ipumov @ 27.07.2011 - 13:44)
$subject = 'Ваш заказ';
  $subject = '=?utf-8?b?'. base64_encode($subject) .'?=';

Это не правильно написано, вы точку забыли
$subject = 'Ваш заказ'; 
$subject .= '=?utf-8?b?'. base64_encode($subject) .'?=';

Цитата (ipumov @ 27.07.2011 - 13:44)
$to = '$pochta';

Нужно так
$to = $pochta;

И возможно так стоит попробовать ?
$message = iconv('WINDOWS-1251', 'UTF-8');
mail($to, $subject, $message, $headers);

Спустя 7 минут, 37 секунд (27.07.2011 - 16:32) killer8080 написал(а):
покажи как инициируются переменные $imy и $otcgestvo

Спустя 2 часа, 58 минут, 52 секунды (27.07.2011 - 19:31) ipumov написал(а):
После того как в документе заменил всё что касалось UTF-8 на WINDOWS-1251, документ.php сохранил в кодировке Windows -1251, и ещё кое-что косметически подправил – с кодировкой всё стало гуд.

Код получился такой (P.S. я ещё скрипт второго письма добавил):


<?php

$to = 'mail@yandex.ru';
$from = $pochta;
$subject = "Заказ на yandex.ru ($familia $imy $otcgestvo)";
$subject = '=?koi8-r?B?'.base64_encode(convert_cyr_string($subject, "w","k")).'?=';
$headers = "Content-type: text/html; charset=windows-1251 \r\n";
$headers .= "From: <". $from .">\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Date: ". date('D, d M Y h:i:s O') ."\r\n";
$message = "Вам письмо первое"

mail($to, $subject, $message, $headers);

header("Location: http://www.site.ru/page-2.html");

?>


<?php


$to = 'mail@yandex.ru';
$from = 'mail@rambler.ru';
$subject = "Заказ на yandex.ru ($familia $imy $otcgestvo)";
$subject = '=?koi8-r?B?'.base64_encode(convert_cyr_string($subject, "w","k")).'?=';
$headers = "Content-type: text/html; charset=windows-1251 \r\n";
$headers .= "From: <". $from .">\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Date: ". date('D, d M Y h:i:s O') ."\r\n";
$message = "Вам письмо второе"

mail($to, $subject, $message, $headers);

?>

Остался вопрос:

1) Почему если я размещаю команду на переадресацию

header("Location: http://www.site.ru/page-2.html");

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


Warning: Cannot modify header information - headers already sent by (output started at w:\home\site.ru\www\zakaz.php:35) in w:\home\site.ru\www\zakaz.php on line 64


Хотя у меня и так всё теперь работает, но просто интересно. Может кто знает?

Спустя 21 минута, 57 секунд (27.07.2011 - 19:53) killer8080 написал(а):
Цитата (ipumov @ 27.07.2011 - 19:31)
то она работает только в теле первого PHP скрипта, а когда в тело второго ставлю (на то же место) то при запуске срипта выпадает такая ошибка:

может файл сохранён в utf8 with BOM, может пробелы или перевод строки был перед <?php

Спустя 4 минуты, 23 секунды (27.07.2011 - 19:58) Winston написал(а):
Цитата (killer8080 @ 27.07.2011 - 19:53)
может файл сохранён в utf8 with BOM

Цитата (ipumov @ 27.07.2011 - 19:31)
документ.php сохранил в кодировке Windows -1251
Цитата (ipumov @ 27.07.2011 - 19:31)
$message = "Вам письмо второе"

Вы забыли ; в конце

Спустя 3 минуты, 51 секунда (27.07.2011 - 20:01) ipumov написал(а):
Цитата (killer8080 @ 27.07.2011 - 16:53)
Цитата (ipumov @ 27.07.2011 - 19:31)
то она работает только в теле первого PHP скрипта, а когда в тело второго ставлю (на то же место) то при запуске срипта выпадает такая ошибка:

может файл сохранён в utf8 with BOM, может пробелы или перевод строки был перед <?php


Ок, ясно.

Хочу поблагодарить форумчан которые откликнулись. Вы мне очень помогли. Теперь у меня есть рабочая форма для отправки емейлов. Ура! smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.