联系表单电子邮件主题的UTF-8编码

9
在这个网站 网站链接 的联系表格中,我需要以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 编码。我们需要在代码的哪里声明它?对于消息,我已经找到了解决方法,但对于主题,我没有找到解决方法。

2个回答

14

这是我是如何做到的:

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

那只是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。它可以为您完成所有操作。更加简单。我建议您使用它。


1
你能告诉我在代码中哪里集成它吗?我一直收到错误信息。 - Daniel Hernandez
变量 $subject = '=?utf-8?q?' . imab_8bit( $subject ) . '?='; 引发了错误:在 /mnt/web3/a2/69/53523169/htdocs/php/sendmail.class.php 的第 8 行,出现了语法错误,预期是 ',' 或 ';',但出现了 '.'。 - Daniel Hernandez
1
看一下我的修改。确保 PHP 文件是 UTF8 编码的,另外获取更多信息请查看链接 http://ncona.com/2011/06/using-utf-8-characters-on-an-e-mail-subject/。在那里有很好的解释如何工作。 - x4rf41

0

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

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

只需将

windows-1251

替换为其他编码(如 utf-8 或其他编码)即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接