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

Posted

技术标签:

【中文标题】联系表单电子邮件中主题的 UTF-8 编码【英文标题】:UTF-8 encoding for subject in contact form email 【发布时间】:2013-06-08 12:10:09 【问题描述】:

在此网站Website Link 联系表上,我需要以 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 德语字符编码。我们需要在代码的什么地方声明呢?对于消息,我发现了该怎么做,但对于主题,我没有找到解决方案。

【问题讨论】:

【参考方案1】:

我是这样做的:

$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。为你做一切。方式更容易。我建议你使用它。

【讨论】:

你能告诉我在哪里将它集成到我的代码中吗?我收到错误消息。 var $subject = '=?utf-8?q?' . imab_8bit($主题)。 '?=';给我:解析错误:语法错误,意外'。',期待','或';'在 /mnt/web3/a2/69/53523169/htdocs/php/sendmail.class.php 第 8 行 看看我的编辑。确保 php 文件是 utf8 编码的,有关更多信息,请查看链接ncona.com/2011/06/using-utf-8-characters-on-an-e-mail-subject。它在那里很好地解释了它是如何工作的【参考方案2】:

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

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

只需替换

windows-1251

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

【讨论】:

以上是关于联系表单电子邮件中主题的 UTF-8 编码的主要内容,如果未能解决你的问题,请参考以下文章

多上传附件联系表单

SmtpClient/MailMessage 上的主题编码

选择选项在 Wordpress 联系表单 PHP 中没有给出值

Outlook 未显示 UTF-8 编码文本 (یب سائٹ Ù) 通过 php 邮件发送的电子邮件

使用 utf-8 文件名发送 MIME 编码的电子邮件附件

检查联系表单中电子邮件地址的格式