2013-06-12 2 views
8

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

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 немецких кодировкой. Где нам нужно объявить его в коде? Для сообщения я узнал, что делать, но для предмета я не нашел решения.

ответ

14

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

$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); 

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

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

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

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

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

+0

Спасибо. Пожалуйста, воздержитесь от моего вопроса. –

+1

Можете ли вы сказать мне, где его интегрировать в мой код? Я получаю сообщения об ошибках. –

+0

var $ subject = '=? Utf-8? Q?' , imab_8bit ($ subject). знак равно дает мне: Ошибка синтаксиса: синтаксическая ошибка, неожиданные '.', ожидающие ',' или ';' в /mnt/web3/a2/69/53523169/htdocs/php/sendmail.class.php в строке 8 –

0

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

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

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

windows-1251

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

Смежные вопросы