UTF-8编码的主题在联系形式电子邮件


UTF-8 encoding for subject in contact form email

在这个网站的网站链接联系形式,我需要在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;
    }

在主题中,我需要utf8德国字符编码。我们需要在代码的什么地方声明它?对于信息,我知道该怎么做,但对于主题,我没有找到解决方案。

我的做法如下:

$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-mail-subject/

对于你的代码,你必须在sendmail类中更改:

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

!只有当你的PHP文件是utf-8编码时,这才可以正常工作!

还是很烦人。然后我切换到phpmailer。这一切都为你准备好了。简单多了。我建议你用这个

或者您可以将$this->subject变量替换为

$ this ->主题="= windows - 1251 ? B ?".base64_encode ($ this ->主题)。’吗? = ';

替换

windows - 1251

使用其他编码(utf-8或其他)