На этих сайтах контактная форма веб- сайта. Мне нужно отправить тему для электронной почты в UTF-8. Где в коде нам нужно объявить кодировку UTF-8?
kontakt.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 немецких символов. Где нам нужно объявить его в коде? Для сообщения я узнал, что делать, но для предмета я не нашел решения.
вот как я это сделал:
$head = "From: \"=?ISO-8859-15?Q?".imap_8bit("äöüßÄÖÜ sollte hier gehen")."?=\" <info@mydomain.de>\n"; $subject = "=?ISO-8859-15?Q?".imap_8bit("äöüßÄÖÜ sollte hier gehen")."?="; mail($mail,$subject,$text,$head);
это только латинская-15 (немецкая) кодировка. utf-8 работает одинаково: посмотрите здесь подробное объяснение того, как использовать кодировку символов в заголовках сообщений: http://ncona.com/2011/06/using-utf-8-characters-on-an-e- почта объекта съемки /
для вашего кода вы должны изменить это в классе sendmail:
if (mail($this->to, '=?utf-8?B?'.base64_encode($this->subject).'?=', $this->body, $this->headers))
! это работает только правильно, если ваш php-файл закодирован в utf-8!
все еще очень раздражает. затем я переключился на phpmailer . что делает все для вас. путь более легкий. я предлагаю вам использовать это.
Или вы можете заменить переменную $ this-> subject
$ this-> subject = '=? windows-1251? B ?. base64_encode ($ this-> subject).'? = ';
Просто замените
окна-1251
с некоторой другой кодировкой (utf-8 или что-то еще)