在php邮件中允许德语变音符号?

时间:2011-01-27 13:55:37

标签: php email character-encoding

我使用此代码通过联系表单发送电子邮件:

<?php

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

    $_emails[0] = "xyz@abc.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;
        }
    }

    ?>

但现在我遇到的问题是,我收到的邮件中没有正确显示ä,ö,ü或ß等特定德语元音。我怎么能改变它?

== EDIT ==

这是一个例子:

  

ö¶

     

üßüß

     

ßß

3 个答案:

答案 0 :(得分:8)

您需要在电子邮件中发送内容类型:UTF-8标题,如下所示:

mail($recipient, $subject, $email,
    'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/plain; charset=UTF-8' . "\r\n");

答案 1 :(得分:1)

尝试为此邮件设置utf-8标头(只需将其添加为mail()的第4个参数):

$header = "MIME-Version: 1.0\r\nContent-type: text/plain; charset=UTF-8\r\n"; 

答案 2 :(得分:0)

使用像swiftmailer这样的库可以简化整个过程。