1

我使用这个 php 脚本来发送电子邮件。它运行良好,但德语变异元音(ö、ä、ü 等)显示不正确。任何提示如何改变它?

<?php

/* Geben Sie hier Ihre E-Mail Adresse zwischen den beiden " an: */

$_emails[0] = "mail@blablablabla.li";

// Wenn keine $_POST Daten übermittelt wurden, dann abbrechen
if(!isset($_POST) OR empty($_POST))
{
    header("Content-type: text/plain");
    echo "Es wurden keine Daten übermittelt!";
    exit;
}
else
{
    // Datum, Uhrzeit und Pfad zum eigenen Script feststellen
    $date = date("d.m.Y");
    $time = date("H:i");
    $host = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];

    // Empfänger feststellen und auf Gültigkeit prüfen
    if(isset($_POST['recipient']) AND isset($_emails[ $_POST['recipient'] ])
       AND preg_match("/^.*@.*\..*$/", $_emails[ $_POST['recipient'] ]))
    {
        $recipient = $_emails[ $_POST['recipient'] ];
    }
    // Wurde kein (gültiger) Empfänger angegeben, es mit $_email[0] versuchen
    elseif(isset($_emails[0]) AND preg_match("/^.*@.*\..*$/", $_emails[0]))
    {
        $recipient = $_emails[0];
    }
    // Ist auch diese Adresse ungültig, mit Fehlermeldung abbrechen
    else
    {
        header("Content-type: text/plain");
        echo "Fehler im Script - es wurde kein Empfänger oder eine ungültige E-Mail Adresse in \ angegeben.";
        exit;
    }

    // Wenn Betreff übermittelt, diesen verwenden
    if(isset($_POST['subject']))
    {
        $subject = $_POST['subject'];
    }
    // sonst einen Default Betreff verwenden
    else
    {
        $subject = "Formular Daten von {$_SERVER['HTTP_HOST']}";
    }

    // E-Mai Kopf generieren
    $email = "Formular Eintrag\n"
           . "\n"
           . "Am $date um $time Uhr hast das Script auf $host Formulardaten empfangen,\n"
           . "welche nach Angabe des Browsers von {$_SERVER['HTTP_REFERER']} stammen.\n"
           . "\n"
           . "Der Formular Inhalt wird nachfolgend wiedergegeben.\n"
           . "\n";

    // Alle $_POST Werte an den E-Mail Kopf anhängen
    foreach($_POST as $key => $value)
    {
        if($key == "redirect" OR $key == "recipient" OR $key == "subject")
        {
            continue;
        }
        $email .= "Fomular Feld '$key':\n"
               .  "=============================\n"
               .  "$value\n"
               .  "\n";
    }

    // E-Mail Fuß anfügen
    $email .= "=============================\n"
           .  "Ende der automatisch generierten E-Mail.";

    // Versuchen E-Mail zu versenden
    if(!mail($recipient, $subject, $email)) {
        // Ist dies gescheitert, Fehlermeldung ausgeben
        echo "Es ist ein Fehler beim Versenden der E-Mail aufgetreten,"
             . " eventuell liegt ein Konfigurationsfehler am Server vor.\n\n";
        exit;
    }

    // Wenn gewünscht, auf Bestätigungsseite weiterleiten
    if(isset($_POST['redirect']) AND preg_match("=^(http|ftp)://.*\..*$=", $_POST['redirect'])) {
       header("Location: ".$_POST['redirect']);
        exit;
    } else {
        header("Content-type: text/html");
        echo "Die E-Mail wurde erfolgreich versendet.";
    echo '<br>';
      echo '<a href="http://www.ovlu.li/cms/index.php?page=kontakt">Zurueck</a>';
        exit;
    }
}

?>

所以我按照第一个答案中的提示进行操作,现在代码如下所示:

<?php

/* Geben Sie hier Ihre E-Mail Adresse zwischen den beiden " an: */

$_emails[0] = "bla@bla.li";

// Wenn keine $_POST Daten übermittelt wurden, dann abbrechen
if(!isset($_POST) OR empty($_POST))
{
   header("Content-type: text/plain; charset=utf-8");
    echo "Es wurden keine Daten übermittelt!";
    exit;
}
else
{
    // Datum, Uhrzeit und Pfad zum eigenen Script feststellen
    $date = date("d.m.Y");
    $time = date("H:i");
    $host = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];

    // Empfänger feststellen und auf Gültigkeit prüfen
    if(isset($_POST['recipient']) AND isset($_emails[ $_POST['recipient'] ])
       AND preg_match("/^.*@.*\..*$/", $_emails[ $_POST['recipient'] ]))
    {
        $recipient = $_emails[ $_POST['recipient'] ];
    }
    // Wurde kein (gültiger) Empfänger angegeben, es mit $_email[0] versuchen
    elseif(isset($_emails[0]) AND preg_match("/^.*@.*\..*$/", $_emails[0]))
    {
        $recipient = $_emails[0];
    }
    // Ist auch diese Adresse ungültig, mit Fehlermeldung abbrechen
    else
    {
        header("Content-type: text/plain");
        echo "Fehler im Script - es wurde kein Empfänger oder eine ungültige E-Mail Adresse in \ angegeben.";
        exit;
    }

    // Wenn Betreff übermittelt, diesen verwenden
    if(isset($_POST['subject']))
    {
        $subject = $_POST['subject'];
    }
    // sonst einen Default Betreff verwenden
    else
    {
        $subject = "Formular Daten von {$_SERVER['HTTP_HOST']}";
    }

    // E-Mai Kopf generieren
    $email = "Formular Eintrag\n"
           . "\n"
           . "Am $date um $time Uhr hast das Script auf $host Formulardaten empfangen,\n"
           . "welche nach Angabe des Browsers von {$_SERVER['HTTP_REFERER']} stammen.\n"
           . "\n"
           . "Der Formular Inhalt wird nachfolgend wiedergegeben.\n"
           . "\n";

    // Alle $_POST Werte an den E-Mail Kopf anhängen
    foreach($_POST as $key => $value)
    {
        if($key == "redirect" OR $key == "recipient" OR $key == "subject")
        {
            continue;
        }
        $email .= "Fomular Feld '$key':\n"
               .  "=============================\n"
               .  "$value\n"
               .  "\n";
    }

    // E-Mail Fuß anfügen
    $email .= "=============================\n"
           .  "Ende der automatisch generierten E-Mail.";

$email = htmlentities($email, ENT_QUOTES, 'uft-8');

    // Versuchen E-Mail zu versenden
    if(!mail($recipient, $subject, $email))
    {
        // Ist dies gescheitert, Fehlermeldung ausgeben
        echo "Es ist ein Fehler beim Versenden der E-Mail aufgetreten,"
             . " eventuell liegt ein Konfigurationsfehler am Server vor.\n\n";
        exit;
    }

    // Wenn gewünscht, auf Bestätigungsseite weiterleiten
    if(isset($_POST['redirect']) AND preg_match("=^(http|ftp)://.*\..*$=", $_POST['redirect']))
    {
       header("Location: ".$_POST['redirect']);
        exit;
    }
    // sonst eine Bestätigung ausgeben
    else
    {
        header("Content-type: text/html");
        echo "Die E-Mail wurde erfolgreich versendet.";
    echo '<br>';
      echo '<a href="http://foto.roser.li/admin/index.php?page=kontakt">Zurueck</a>';
        exit;
    }
}

?>

现在,当我发送电子邮件时,会显示以下消息:

> Warning: htmlentities(): charset
> `uft-8' not supported, assuming
> iso-8859-1 in
> /home/www/web21/html/roser/foto/admin/mail.php
> on line 77 Die E-Mail wurde
> erfolgreich versendet.
4

2 回答 2

4

utf-8在标题中尝试内容类型的字符集:

header("Content-type: text/plain; charset=utf-8");

此外,htmlentities为您的电子邮件内容使用功能:

$email = htmlentities($email, ENT_QUOTES, 'uft-8');
于 2010-06-10T20:51:09.880 回答
0

现在,假设您已正确保存数据,这就是您可以尝试以下操作的方法。

$subject = "=?UTF-8?B?" . base64_encode($newsletter->subject) . "?=";

这里的想法是让原始电子邮件主题行看起来像这样:

Subject: =?UTF-8?B?base64_encoded_subject?=\r\n;

对于身体,

$email = 'Content-Type: text/plain; charset="ISO-8859-1"' . "\r\n\r\n";
$email .= $email;

这个想法是让电子邮件内容按照它的字符集进行。这对我有用。

要正确获取发布的数据,您需要使用内容/类型标头设置页面编码。

header("Content-type: text/plain; charset=utf-8");

希望它对你有用,自从我使用 php 邮件功能以来已经有一段时间了。你可能想看看SwiftMailer

于 2010-06-11T09:09:22.197 回答