Кодировка UTF-8 для темы в электронной почте контактной формы

На этих сайтах контактная форма Ссылка на сайт Мне нужно отправить тему по электронной почте в UTF-8 . Где в коде нам нужно объявить кодировку UTF-8?

контакт.php:

<?
require_once "php/sendmail.class.php";
$sendmail = new sendMail();
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
$sendmail->setParams($_POST);
$sendmail->parseBody();
$sendmail->setHeaders();
if ($sendmail->send())
{
    header('Location: kontakt.php?success=1');
}
}
?>

sendmail.class.php:

class sendMail {

var $to      = 'email'; // set contact email

var $name    = '';
var $subject = '';
var $email   = '';
var $body    = '';
var $error   = array();
var $headers = array();

function setHeaders()
{
    $this->headers = "From: $this->email\r\n";
    $this->headers.= "MIME-Version: 1.0\r\n";
    $this->headers.= "Content-type: text/html; charset=UTF-8\r\n";
}

function parseBody()
{
    $message     = '<html><body>';
    $message .= '<table rules="all" style="border-color: #666;" cellpadding="10">';
    $message .= '<tr style="background-color: #eee;"><td><strong>Name:</strong> </td><td>' . $this->name . '</td></tr>';
    $message .= "<tr><td><strong>E-Mail-Adresse:</strong> </td><td>" . $this->email . "</td></tr>";
    $message .= "<tr><td><strong>Betreff:</strong> </td><td>" . $this->subject . "</td></tr>";
    $message .= "<tr><td><strong>Text:</strong> </td><td>" . $this->body . "</td></tr>";
    $message .= "</table>";
    $message .= "</body></html>";
    $this->body  = $message;
}

function send()
{
    if ($this->error)
    {
        return FALSE;
    }

    if (mail($this->to, $this->subject, $this->body, $this->headers))
    {
        return TRUE;
    }
    else
    {
        $this->error[] = 'Fehler beim senden';
        return FALSE;
    }

В теме мне нужна кодировка немецких символов utf 8. Где нам нужно объявить это в коде? Для сообщения я нашел, что делать, но для темы я не нашел решения.


person Daniel Hernandez    schedule 12.06.2013    source источник


Ответы (2)


вот как я это сделал:

$head = "From: \"=?ISO-8859-15?Q?".imap_8bit("äöüßÄÖÜ sollte hier gehen")."?=\" <[email protected]>\n";
$subject = "=?ISO-8859-15?Q?".imap_8bit("äöüßÄÖÜ sollte hier gehen")."?=";
mail($mail,$subject,$text,$head);

это просто кодировка Latin-15 (немецкая). utf-8 работает так же: посмотрите здесь отличное объяснение того, как использовать кодировку символов в заголовках почты: http://ncona.com/2011/06/using-utf-8-characters-on-тема-e-mail/

для вашего кода вы должны изменить это в классе sendmail:

if (mail($this->to, '=?utf-8?B?'.base64_encode($this->subject).'?=', $this->body, $this->headers))

! это работает правильно, только если ваш php-файл закодирован в utf-8!

все равно очень раздражает. затем я переключился на phpmailer. который делает все за вас. куда проще. я бы предложил вам использовать это.

person x4rf41    schedule 12.06.2013
comment
Можете ли вы сказать мне, где это интегрировать в мой код? Я получаю сообщения об ошибках. - person Daniel Hernandez; 12.06.2013
comment
var $subject = '=?utf-8?q?' . imab_8bit($тема). знак равно дает мне: Ошибка синтаксического анализа: синтаксическая ошибка, неожиданное '.', ожидание ',' или ';' в /mnt/web3/a2/69/53523169/htdocs/php/sendmail.class.php в строке 8 - person Daniel Hernandez; 12.06.2013
comment
посмотри на мою правку. убедитесь, что файл php имеет кодировку utf8, также для получения дополнительной информации перейдите по ссылке ncona.com/2011/06/using-utf-8-characters-on-an-e-mail-subject. Там хорошо объяснено, как это работает - person x4rf41; 12.06.2013

Или вы можете заменить переменную $this->subject на

$this->subject = '=?windows-1251?B?'.base64_encode($this->subject).'?=';

Просто замените

окна-1251

с какой-то другой кодировкой (utf-8 или что-то еще)

person Pavel Kenarov    schedule 06.09.2016