2013-06-12 5 views
8

Auf diesen Seiten Website Link Kontaktformular Ich muss den Betreff für E-Mail in UTF-8 senden. Wo im Code müssen wir die UTF-8-Codierung deklarieren?UTF-8 Codierung für Betreff in Kontaktformular E-Mail

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; 
    } 

Im Fach I UTF 8 Deutsch Zeichen benötigen kodiert. Wo müssen wir es im Code angeben? Für die Nachricht habe ich herausgefunden, was zu tun ist, aber für das Thema habe ich keine Lösung gefunden.

Antwort

14

hier ist, wie ich es tat:

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

, das ist OFC nur Latin-15 (deutsch) Codierung. utf-8 funktioniert auf die gleiche Art und Weise: hier für eine große Erklärung, wie Zeichenkodierung in Mail-Header zu verwenden: http://ncona.com/2011/06/using-utf-8-characters-on-an-e-mail-subject/

für Ihren Code, den Sie dies in der Sendmail-Klasse ändern:

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

! Das funktioniert nur, wenn Ihre PHP-Datei utf-8 kodiert ist!

immer noch sehr nervig. dann wechselte ich zu phpmailer. das macht alles für dich. viel einfacher. Ich würde vorschlagen, dass Sie das verwenden.

+0

Vielen Dank ein $ this-> Subjektvariable ersetzen. Bitte upvote meine Frage. –

+1

Können Sie mir sagen, wo ich es in meinen Code integrieren soll? Ich erhalte Fehlermeldungen. –

+0

var $ subject = '=? Utf-8? Q?' . imab_8bit ($ subject). "? ="; gibt mir: Parse-Fehler: Syntaxfehler, unerwartete '.', erwartet ',' oder ';' in /mnt/web3/a2/69/53523169/htdocs/php/sendmail.class.php in Zeile 8 –

0

Oder Sie können mit

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

Ersetzen Sie einfach

windows-1251

mit einer anderen Kodierung (utf-8 oder etwas anderes)

Verwandte Themen