tabur: Keine Umlaute in Formularergebnissen via E-Mail

Hallo zusammen,

zuerst: ich bin Laie, habe aber ein schönes Formular hinbekommen, das serverseitig mittels einer Datei (XXX.php) verarbeitet wird und mir die Ergebnisse via Mail zusendet. Funktioniert auch alles ganz wunderbar. Einziger Haken ist, dass in der Mail keine Umlaute dargestellt werden, sondern unleserliche Zeichenfolgen. Ich habe keine Ahnung, wie ich das Problem ändern könnte - kann mir jemand helfen/Tipps geben dazu?

Die Seite selber bzw. die Seite, in der das Formular ist, ist utf-8 codiert, habe es aber auch schon mit ISO probiert - nix. :-(

Besten Dank im voraus
und freundliche Grüße

tabur

  1. hi,

    zuerst: ich bin Laie, habe aber ein schönes Formular hinbekommen, das serverseitig mittels einer Datei (XXX.php) verarbeitet wird und mir die Ergebnisse via Mail zusendet. Funktioniert auch alles ganz wunderbar. Einziger Haken ist, dass in der Mail keine Umlaute dargestellt werden, sondern unleserliche Zeichenfolgen. Ich habe keine Ahnung, wie ich das Problem ändern könnte - kann mir jemand helfen/Tipps geben dazu?

    Gebe in der Mail an, welche Zeichenkodierung du verwendest, in dem du ihr einen Content-Type Header mit entsprechender Angabe verpasst. Beispiele siehe mail() im Manual.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. danke dir, wahsaga für deine rasche antwort! leider bin ich wirklich totaler laie und weiß nicht sorecht, was ich wo einbauen kann/muss.

      bedeutet, dass in der mail.php die codierung fehlt?

      das ist der inhalt der mail.php, die die ergebnisse verarbeitet:

      /************************************
       * KONFIGURATION                    *
       ***********************************/

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

      $_emails[0] = "XX@XXX.de";

      /* Es ist möglich, weitere Empfänger zu definieren, durch weitere
         Zeilen, die vom Aufbau identisch zur obigen sind, lediglich statt
         der 0 muss immer eine andere Zahl dort stehen.
         Per input type=hidden Feld im Formular kann dann der Empfänger
         festgelegt werden:
         <input type="hidden" name="recipient" value="0">
         Bei 0 ist die Nummer der E-Mail Adresse anzugeben. */

      /* Weiterhin ist es möglich, ebenfalls mit einem input type=hidden
         Feld, anzugeben wohin der Besucher nach versenden der Mail
         weitergeleitet werden soll:
         <input type="hidden" name="redirect" value="http://www.XXX.de">
         Die URL muss mit http:// oder ftp:// beginnen. */

      /* Ebenfalls kann der Betreff der versendeten E-Mail vorgegeben werden:
         <input type="hidden" name="subject" value="Hier der Betreff">
         Standardmäßig wird als Betreff "Formular Daten" verwendet. */

      /************************************
       * SCRIPT                           *
       ***********************************/

      /* Wenn Sie keine Ahnung haben, sollten Sie spätestens hier aufhören,
         irgendwas zu verändern. */

      // 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 $_emails[0] 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;
       }
       // sonst eine Bestätigung ausgeben
       else
       {
        header("Content-type: text/html");
        echo "Die E-Mail wurde erfolgreich versendet.";
        exit;
       }
      }