PHP-Mailer - Umlaute werden falsch dargestellt

Hier wird alles rund um Php gepostet.
Antworten
firecracker1177
Beiträge: 1
Registriert: 26.06.2009 19:11

PHP-Mailer - Umlaute werden falsch dargestellt

Beitrag von firecracker1177 »

Hallo!

Ich habe ein kleines Problem mit meinem PHP-Script. Die Umlaute werden leider nicht richtig gesendet. Wenn ich das Formular auf meiner Website ausfülle, und ich einen Namen mit Umlauten eingebe, werden die Umlaute nur durch irgendwelche Platzhalter dargestellt. Ich lasse mir die Daten in eine Textdatei schreiben die auf dem Server gespeichert wird. (Hier wird alles korrekt angezeigt) Die Daten werden dann mit Hilfe des Mailers an meine Email-adresse gesendet.

Hier ist der Code:

<?php

// Daten in eine Textdatei schreiben
//===================================
$fp = fopen ("Formulardaten.txt", "w");
fwrite ($fp, "Kundendaten" . "\r\n");
fwrite ($fp, "-----------" . "\r\n");
fwrite ($fp, "Vorname: " . $vorname . "\r\n");
fwrite ($fp, "Name: " . $name . "\r\n");
fwrite ($fp, "Firma: " . $firma . "\r\n");
fwrite ($fp, "Email: " . $email . "\r\n");
fwrite ($fp, "Telefon: " . $telefon . "\r\n");
fwrite ($fp, "\r\n");
fwrite ($fp, "Kunde interessiert sich für folgenden Titel: " . $titelname . "\r\n");
fwrite ($fp, "\r\n");
fwrite ($fp, "Er möchte den Titel" . "\r\n");
foreach($titel as $value) {
fwrite ($fp, " - " . $value . "\r\n");
}
fwrite ($fp, "\r\n");
fwrite ($fp, "Der Kunde hat folgendes Anliegen" . "\r\n");
foreach($anliegen as $value) {
fwrite ($fp, " - " . $value . "\r\n");
}
fwrite ($fp, "\r\n");
fwrite ($fp, "Nachricht des Kunden: " . "\r\n");
fwrite ($fp, "--------------------- " . "\r\n" . $nachricht . "\r\n");
fclose ($fp);

// Alle Daten der Textdatei in einen String lesen
//================================================
$fp = fopen ("Formulardaten.txt", "r");
$inhalt = fread ($fp, filesize("Formulardaten.txt") );
fclose ($fp);
//$inhalt = str_replace("\n.", "\n..", $inhalt);

// Daten/String per Email verschicken
//====================================
$recipient = "info@dygryn-musikverlag.de";
mail ($recipient, "Kundenanfrage", $inhalt);

// Erfolgsmeldung auf nächster Web-Seite ausgeben
//================================================
$fmtResponse= implode("", file("kontakt_gesendet.html"));
foreach($_POST as $key=> $val)
{
$fmtResponse= str_replace("<$key>", $val, $fmtResponse);
}
echo $fmtResponse;

?>

Es wäre nett wenn ihr mir helfen könntet. Bin für jeden Tip dankbar.
admin
Site Admin
Beiträge: 336
Registriert: 09.03.2005 10:41
Wohnort: Arnstadt
Kontaktdaten:

Re: PHP-Mailer - Umlaute werden falsch dargestellt

Beitrag von admin »

Hallo!

Zuerst möchte ich darauf hinweisen, dass es sich bei dem Script, um ein PHP-Script und nicht um ein CGI-Script handelt. Ich habe deinen Beitrag entsprechend geändert und verschoben, um Verwirrungen zu vermeiden.

Nun zu deinem Problem mit den Umlauten in der E-Mail: Dies liegt wahrscheinlich an der fehlenden Angabe der Zeichenkodierung (Charset) in der E-Mail. Um das zu beheben, ergänze die Mail-Funktion mit zusätzlichen Header-Informationen, die den MIME-Typ und die Zeichenkodierung angeben:

Code: Alles auswählen

// Daten/String per Email verschicken
//====================================
$empfaenger = "info@dygryn-musikverlag.de";
$betreff = "Kundenanfrage";
$header = "MIME-Version: 1.0\r\n";
$header .= "Content-type: text/plain; charset=utf-8\r\n";
mail($empfaenger, $betreff, $inhalt, $header);
Setze den Zeichensatz der E-Mail auf UTF-8:

Bevor du die E-Mail versendest, stelle sicher, dass du den Content-Type-Header der E-Mail auf UTF-8 setzt. Das erreichst du, indem du den folgenden Code vor der `mail()`-Funktion einfügst:

Code: Alles auswählen

$headers = "Content-Type: text/plain; charset=UTF-8\r\n";
Verwende die mb_*-Funktionen, um Dateien und Strings in UTF-8 zu verarbeiten:

Stelle sicher, dass du die Multibyte-String-Funktionen zum Lesen und Schreiben von Dateien und zum Verarbeiten von Strings verwendest. `mb_substr()` anstelle von `substr()` und `mb_strlen()` anstelle von `strlen()` usw. Installiere das `mbstring`-Modul, wenn es noch nicht installiert ist.

Schreiben und Lesen von Dateien in UTF-8:

Zum Schreiben einer Datei in UTF-8 verwende `fwrite`:

Code: Alles auswählen

fwrite($fp, "\xEF\xBB\xBF"); // Füge die UTF-8-BOM am Anfang der Datei hinzu
Beim Lesen einer Datei in UTF-8, verwende `fread` ohne Änderungen.

Speichere die PHP-Datei in UTF-8-Encoding:

Stelle sicher, dass die PHP-Datei in UTF-8 gespeichert ist, um mögliche Inkompatibilitäten bei der Verarbeitung von Umlaut-Texten zu vermeiden. Die meisten modernen Text- und Code-Editoren bieten diese Funktion an.

Solltest du noch weitere Fragen oder Probleme bezüglich dieses Themas, oder auch anderen Themen haben, zögere bitte nicht, dich erneut hier zu melden. Ich stehe gerne zur Verfügung, um dir weiterzuhelfen und dir bei deinen Anliegen zu unterstützen.

Liebe Grüße Nico
Antworten