PHP Umlaute - ich schaffe es einfach nicht...

E=mc²

Ensign
Dabei seit
Dez. 2006
Beiträge
198
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)

enzor

Commander
Dabei seit
Sep. 2006
Beiträge
2.428
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:

E=mc²

Ensign
Ersteller dieses Themas
Dabei seit
Dez. 2006
Beiträge
198
Keine Auswirkung aufs Formular. :(
 

E=mc²

Ensign
Ersteller dieses Themas
Dabei seit
Dez. 2006
Beiträge
198
Sollte passen. Ist der Code denn eurer Meinung nach okay?
 

Darlis

Commodore
Dabei seit
Jan. 2011
Beiträge
4.141

Daaron

Fleet Admiral
Dabei seit
Dez. 2011
Beiträge
13.487
Üblicherweise lässt sich sowas durch ne Kombination von mb_detect_encoding (im Strict-Mode) und utf8_encode bzw. utf8_decode lösen.
 

E=mc²

Ensign
Ersteller dieses Themas
Dabei seit
Dez. 2006
Beiträge
198
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.
 

NoXPhasma

Lieutenant
Dabei seit
Jan. 2010
Beiträge
527
PHP:
$text .= "\n\nNachricht: \n\n" . utf8_encode($_POST['nachricht']) . "\n";
bzw

PHP:
$text .= "\n\nNachricht: \n\n" . utf8_decode($_POST['nachricht']) . "\n";
 

Daaron

Fleet Admiral
Dabei seit
Dez. 2011
Beiträge
13.487
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....
 

E=mc²

Ensign
Ersteller dieses Themas
Dabei seit
Dez. 2006
Beiträge
198
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.
 

Daaron

Fleet Admiral
Dabei seit
Dez. 2011
Beiträge
13.487
dann dreh es doch mal um: not(mb_detect..) und utf8_encode. Mal sehen, was dann passiert
 

E=mc²

Ensign
Ersteller dieses Themas
Dabei seit
Dez. 2006
Beiträge
198
not statt if? Funktioniert nicht, das Formular baut nicht mehr auf. Wie gesagt, ich hab wirklich keine Ahnung von PHP. :(
 

Darlis

Commodore
Dabei seit
Jan. 2011
Beiträge
4.141
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);
}
 

E=mc²

Ensign
Ersteller dieses Themas
Dabei seit
Dez. 2006
Beiträge
198
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.
 

Trainmaster

Lt. Junior Grade
Dabei seit
Nov. 2006
Beiträge
318
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.
 
Top