PHP Umlaute - ich schaffe es einfach nicht...

E=mc²

Ensign
Registriert
Dez. 2006
Beiträge
203
mail() Umlaute - ich schaffe es einfach nicht...

Hallo Liebe Gemeinde,

ich sitze nun 3 Tage an einem Kontaktformular und bekomme einfach keine vernünftigen Umlaute hin.

Zunächst mal der Code:
PHP:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
.........
........
.......
<?php
	if($_POST['senden']) {
		if(strstr($_POST['nachricht'], "Content-Type") OR strstr($_POST['email'], "Content-Type")) {
			echo "Fehler!\n";
			die();
		}
		
		// mail header
		$mailHeader 	= "MIME-Version: 1.0\nContent-Type: text/plain; charset=utf-8\r\n";
		$kontaktEmail 	= "meine@mail.de";
		$kontaktSubject = "Umlaute nerven, NÄ?";
	
		$subject = "fragen kostät nix - Danke für die Anfrage";		
	
		// mailtext
		$text  = "&auml; oder ä\n\n";
		$text .= "E-Mail: " . $_POST['email'] . "\n";
		$text .= "\n\nNachricht: \n\n" . $_POST['nachricht'] . "\n";
		$submit = "Wir haben Ihre MÄIL erhalten....";
		
		// senden
		mail($kontaktEmail, $kontaktSubject, $text, $mailHeader."From: ".$_POST['email']);
		mail($_POST['email'], $subject, $submit, $mailHeader."From: ".$kontaktEmail);
		
		// bestätigen das mail verschickt wurde
		echo "<p>Vielen Dank,<br>ihre Anfrage wird nun m&ouml;glichst schnell bearbeitet.<br>";
		echo "HIER WERDEN DIE UMLAUTE KORREKT DARGESTELLT.</p>\n";

	} else {
?>
	<form action="#" method="post">
.......
........
.........

Ist das Formular so aufgebaut und ich sende darüber ein ä (im Nachrichtenfeld) passiert folgendes:

Webmail:
an den der ausfüllt
Betreff fragen kost�t nix - Aanke f�r die anfrage
Wir haben Ihre M�IL erhalten....

an den der empfängt
Subject: Umlaute nerven, N�?
&auml; oder �
Nachricht:

ä
----
The Bat:
an den der ausfüllt
Betreff fragen kost?t nix - Aanke f?r die anfrage
Wir haben Ihre M?IL erhalten....

an den der empfängt
Betreff: Umlaute nerven, N??
&auml; oder ?
Nachricht:

ä

T-Online:
an den der ausfüllt
Betreff: fragen kostXt nix - Aanke fXr die anfrage
Wir haben Ihre M?IL erhalten....

an den der empfängt
Betreff:Umlaute nerven, NX?
&auml; oder ?
Nachricht:

ä
#################

Ich denke jetzt habe ich alles bis ins Detail abgegriffen. Könnte mich bitte jemand erlösen? Ich sehe so langsam keine klaren Bilder mehr... :freak:

Lösungsvorschläge bitte so Posten das ich weiß wo und wie ich sie einfügen muss, ich bin kein PHPler, ich mach eig. nur HTML und CSS.

Danke :)
 
Zuletzt bearbeitet: (verständlicher)
Deine erste Zeile:
Code:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Wie wärs mit:
Code:
<meta http-equiv="Content-Type" content="text/html"; charset="utf-8" />


Hab da jetzt auch nich so den Plan, aber Google + Logik sagt mir das jetz so...

edit: vllt. muss auch das Semikolon da nicht hin?
 
Zuletzt bearbeitet:
Keine Auswirkung aufs Formular. :(
 
Sollte passen. Ist der Code denn eurer Meinung nach okay?
 
Üblicherweise lässt sich sowas durch ne Kombination von mb_detect_encoding (im Strict-Mode) und utf8_encode bzw. utf8_decode lösen.
 
Könntest Du mir das bitte praxisnah erklären bzw zeigen? Ich verstehe nicht wie ichs einbauen muss.

Falls relevant: Wenn ich den Mailheader auf Latin 1 umstelle sind in den Mails die Umlaute die unter UTF8 nicht lesbar wahren plötzlich lesbar. Umlaute die vorher lesbar waren werden allerdings unlesbar. T-Online tangiert das allerdings nicht, dort werden Umlaute im Betreff nie korrekt dargestellt.
 
PHP:
$text .= "\n\nNachricht: \n\n" . utf8_encode($_POST['nachricht']) . "\n";

bzw

PHP:
$text .= "\n\nNachricht: \n\n" . utf8_decode($_POST['nachricht']) . "\n";
 
im Endeffekt schickst du einfach mal jeden Einzelteil deiner Strings, also sowohl die generierten als auch die hardkodierten, separat durch eine solche Funktion:

PHP:
if(mb_detect_encoding($str, 'UTF-8', true))
{
 $str = utf8_decode($str);
}

Wenn der Eingangs-String in UTF-8 war, wird er danach in Latin-1 umgewandelt, ansonsten passiert einfach nix. Daher auch separat auf jeden Teilstring anwenden....
 
Wenn ichs richtig verstehe also:

PHP:
		$submit = "Wir haben Ihre MÄIL erhalten....";
		
		    if(mb_detect_encoding($submit, 'UTF-8', true))
    {
    $submit = utf8_decode($submit);
    }

Nur das greift leider nicht.
 
dann dreh es doch mal um: not(mb_detect..) und utf8_encode. Mal sehen, was dann passiert
 
not statt if? Funktioniert nicht, das Formular baut nicht mehr auf. Wie gesagt, ich hab wirklich keine Ahnung von PHP. :(
 
Daaron meint, dass du das Ergebnis von mb_detect_encoding negieren sollst:
PHP:
if(!mb_detect_encoding($submit, 'UTF-8', true))
{
	$submit = utf8_encode($submit);
}
 
Ah super, das funktioniert:

PHP:
		$submit = "Wir haben Ihre MÄIL erhalten....";
		
    	if(!mb_detect_encoding($submit, 'UTF-8', true))
   		{
    	$submit = utf8_encode($submit);

Wenn ich das auf $subject anwende funktioniert es zwar auch, T-Online zeigt statt Umlaut aber noch immer X an. gmail und gmx machen diese Probleme nicht.

Könntet Ihr mit bitte auch noch sagen wie ich diese Methode bei

PHP:
	$text  = "&auml; oder ä\n\n";
		$text .= "E-Mail: " . $_POST['email'] . "\n";
		$text .= "\n\nNachricht: \n\n" . $_POST['nachricht'] . "\n";

anwenden kann?

E-Mail und Nachricht kommen ja dank dem UTF-8 um header vernünftig an, die Erste Zeile

PHP:
$text  = "&auml; oder ä\n\n";

wird vom header allerdings nicht beachtet. Wende ich nun auf $text Daarons Methode an wird E-Mail und Nachticht wieder falsch dargestellt.
 
Anstatt an einer wirklichen Problemlösung zu arbeiten, wird hier schon wieder mit einer encode/decode-Variante gepfuscht.

Stattdessen empfehle ich dir ausdrücklich, eine Mailerklasse einzusetzen, wie zum Beispiel Zend_Mail, Swiftmailer oder PHPMailer. Worin liegt der Vorteil? Die Mailerklassen haben die RFCs implementiert, die beim Mailversand zu berücksichtigen sind. Natürlich kannst du versuchen, dass alles selbst zu integrieren, was allerdings eine Heidenarbeit sein dürfte. Mit dem Einsatz einer Mailerklasse ersparst du dir einerseits diesen Aufwand und andererseits musst du dich nicht mit diversen Problem beim Mailversand herumschlagen.

Zuletzt sei auch gesagt, dass noch nicht alle E-Mail Programme bzw. Webmail-Lösungen UTF-8 unterstützen, obwohl es ausdrücklich empfohlen wird: http://www.imc.org/mail-i18n.html.
 
Picola schrieb:
Vlt die PHP Datei unter einer falschen Codierung gespeichert?

Genau das war der Fehler, danke Picola. :)

Ich dachte zunächst das damit der Metabereich gemeint ist, nun bin ich schlauer.

Läuft alles. :)
 
Zurück
Oben