ФорумПрограммированиеPHP для идиотов → Русские символы не отображаются в письме, отправленным php-скриптом

Русские символы не отображаются в письме, отправленным php-скриптом

  • reload39

    Сообщения: 6 Репутация: N Группа: Кто попало

    Spritz 23 сентября 2007 г. 12:04

    Всем привет!
    Я очень плохо знаю php. Практически не знаю. Очень прошу объяснять подробно.
    Сайт выполнен в кодировке iso-8859-5. Менять ее крайне нежелательно.

    вот часть скрипта:

    <?
    $tomail = "…";
    $subject = "….";
    $message = "Name: $name
    Email: $email
    Company name…..
    ……";
    mail($tomail,$subject,$message,"Content-Type: text/html; charset=Utf-8"); #пробовал разные кодировки и разные почтовые ящики#
    ?>

    Результат один и тот же- все, что было введено на русском превращается в "????????". Англ. буквы и цифры отображаются нормально.

    И еще один вопрос)

    В моей форме есть пункт, где нужно выбрать из списка один или более элементов.
    На почту приходит лишь нижний элемент. Что делать?
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 23 сентября 2007 г. 12:21, спустя 17 минут 18 секунд

    1. http://ru.php.net/manual/ru/function.convert-cyr-string.php
    2. http://ru.php.net/variables.external (Пример 12-10. Более сложные переменные формы)
  • reload39

    Сообщения: 6 Репутация: N Группа: Кто попало

    Spritz 23 сентября 2007 г. 13:28, спустя 1 час 6 минут 34 секунды

    Второй пример не понял, а первый понял не до конца. Получается, что мне нужно конвертировать строку, например, из iso-8859-5 в windows-1251. А где в моем скрипте строка? Т.е. куда вставить эту команду..) Понимаю, что вопрос звучит глупо, но я с php сталкиваюсь первый раз- не знаю ни синтаксиса, ни общих правил, но скрипт очень нужен.
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 23 сентября 2007 г. 16:34, спустя 3 часа 5 минут 59 секунд

    тебе нужно сконвертировать $subject, $message
    хотя с $subject-ом отдельные грабли, почитай здесь http://forum.pyha.ru/topic/50.0
  • reload39

    Сообщения: 6 Репутация: N Группа: Кто попало

    Spritz 23 сентября 2007 г. 17:28, спустя 54 минуты 19 секунд

    С темой письма проблем нет, т.к. она на английском.
    Вот так примерно получается?:
    <?
    $tomail = "…";
    $subject = "….";
    $message = "Name: $name
    Email: $email
    Company name…..
    ……";
    $message = "convert_cyr_string ( $message, i, w )";
    mail($tomail,$subject,$message,"Content-Type: text/html; charset=windows-1251");
    ?>

    p/s: спасибо за помощь!
  • reload39

    Сообщения: 6 Репутация: N Группа: Кто попало

    Spritz 24 сентября 2007 г. 16:17, спустя 22 часа 48 минут 22 секунды

    Нашел расширенный вариант этой ф-ии и сконвертировал заголовок, кот. теперь на русском. Все получилось!
    $subject = '=?koi8-r?B?'.base64_encode(convert_cyr_string($subject, "i","k")).'?=';

    Потом то же проделал с $message и на почту пришло "=?koi8-r?B?TmFtZTogDQpFbWFpbDogDQpDb21wYW55IG5hbWU6IA0KTmFtZSw……"

    $message = '=?koi8-r?B?'.base64_encode(convert_cyr_string($message, "i","k")).'?=';
    Почему так?
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 24 сентября 2007 г. 17:10, спустя 53 минуты 4 секунды

    c message так делать не надо, просто конвертни его в нужную кодировку, как и раньше.
  • reload39

    Сообщения: 6 Репутация: N Группа: Кто попало

    Spritz 25 сентября 2007 г. 8:38, спустя 15 часов 28 минут 34 секунды

    Раньше я $message не конвертировал. Как это сделать правильно?
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 25 сентября 2007 г. 9:12, спустя 33 минуты 18 секунд

    $message = convert_cyr_string ( $message, i, w );
  • reload39

    Сообщения: 6 Репутация: N Группа: Кто попало

    Spritz 25 сентября 2007 г. 9:46, спустя 34 минуты 43 секунды

    На mail.ru все приходит! Оказалось, что играет роль и почтовая программа (или вариант, когда почту проверяют через сайт провайдера)..
    Вот рабочий скрипт:
    <?
    $tomail = "[email protected]";
    $subject = "Можно на русском!";
    $subject = '=?koi8-r?B?'.base64_encode(convert_cyr_string($subject, "i","k")).'?=';
    $message = "
    /Name: $name <br>
    /Email: $email <br>
    "
    ;
    $message = convert_cyr_string ( $message, "i","k");
    mail($tomail,$subject,$message, "Content-Type: text/html; charset=koi8-r");
    ?>

    Огромне спасибо, ghost!!!

Пожалуйста, авторизуйтесь, чтобы написать комментарий!