christiande
Grünschnabel
Hallo
Nach mehreren Tagen googeln und probieren gebe ich mich geschlagen und bekenne, daß ich es nicht selber finde wie man wo die Zeichensätze für die deutschen Umlaute anwendet - denn es will einfach nicht funktionieren.
Ich hoffe hier einige Tips zu bekommen. Wo ist mein Denkfehler?
Kurz zur Situation:
- Ich will Daten von einem Formular übertragen
- diese sollen in mySQL DB gespeichert werden und teilweise anschließend per html mail()
versendet werden
- die Umlaute sollen immer korrekt sein
Hier Scriptauszüge vom aktuellen Stand:
Die Datei wo das Formular drin ist beginnt mit:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>login.inc.php</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-EQUIV="pragma" content="no-cache">
<meta name="Content-Language" content="De">
Die Umlaute auf der Seite werden korrekt angezeigt.
Das Formular ist so konfiguriert:
<form id="FormName" action="index.php" method="get" name="Formneuregister" accept-charset="UTF-8" >
Die Seite an die der script gesendet wird, ist so formatiert:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>index.php</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-EQUIV="pragma" content="no-cache">
<meta name="Content-Language" content="De">
Die Umlaute auf dieser Seite werden auch korrekt dargestellt.
Der Eintrag in der Datenbank sieht so aus:
Anstelle; Wändöß wurde das gespeichert: Wändöß
und anstelle von Tümöß wurde das hier gespeichert: Tümöß
Anmerkung: Das soll natürlich nicht so sein.
Dann paar Zeilen weiter unten wird eine Mailfunktion ausgeführt wo auch Variablen vom <form> verwendet werden.
mail() ist wie folgt konfiguriert:
Dieser Funktion werden folgende Daten übergeben:
In der Variable $vorname steht ja Tümöß was ja so in der db gespeichert wurde: Tümöß
In der Email sieht das so aus:
Hallo TÌmö� !
wir freuen uns, dass Du dich fÃŒr eine Anmeldung .....
So- Ich hoffe ich habe an alles gedacht und Ihr seht hier durch und könnt mir einen Tip geben.
Nach mehreren Tagen googeln und probieren gebe ich mich geschlagen und bekenne, daß ich es nicht selber finde wie man wo die Zeichensätze für die deutschen Umlaute anwendet - denn es will einfach nicht funktionieren.
Ich hoffe hier einige Tips zu bekommen. Wo ist mein Denkfehler?
Kurz zur Situation:
- Ich will Daten von einem Formular übertragen
- diese sollen in mySQL DB gespeichert werden und teilweise anschließend per html mail()
versendet werden
- die Umlaute sollen immer korrekt sein
Hier Scriptauszüge vom aktuellen Stand:
Die Datei wo das Formular drin ist beginnt mit:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>login.inc.php</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-EQUIV="pragma" content="no-cache">
<meta name="Content-Language" content="De">
Die Umlaute auf der Seite werden korrekt angezeigt.
Das Formular ist so konfiguriert:
<form id="FormName" action="index.php" method="get" name="Formneuregister" accept-charset="UTF-8" >
Die Seite an die der script gesendet wird, ist so formatiert:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>index.php</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-EQUIV="pragma" content="no-cache">
<meta name="Content-Language" content="De">
Die Umlaute auf dieser Seite werden auch korrekt dargestellt.
Der Eintrag in der Datenbank sieht so aus:
Anstelle; Wändöß wurde das gespeichert: Wändöß
und anstelle von Tümöß wurde das hier gespeichert: Tümöß
Anmerkung: Das soll natürlich nicht so sein.
Dann paar Zeilen weiter unten wird eine Mailfunktion ausgeführt wo auch Variablen vom <form> verwendet werden.
mail() ist wie folgt konfiguriert:
PHP:
function send_MIME_email( $email ){
/*
Parameter: [Array]
"recip": Email Empf?nger (String)
"sender": Email Absender (String)
"subject": Betreff (String)
"content": [Array]
"plain": Nachricht im Plaintextformat (String)
"html": Nachricht im HTML-Format (String)
"attachment": Pfad der anzuh?ngenden Datei (String)
Ausgabe: Boolean (TRUE/FALSE)
TRUE: Email wurde versendet
FALSE: Email wurde nicht versendet
*/
if( empty($email["recip"]) || empty($email["sender"]) || empty($email["subject"]) ) {
// recip, sender oder subject wurden nicht angegeben
return false;
}
if( !validate_email($email["recip"]) || !validate_email($email["sender"]) ) {
// der Aufruf der Hilfsfunction oben ("validate_email") gab FALSE zur?ck,
// die Email Adresse von Sender und/oder Empf?nger ist also ung?ltig
return false;
}
if( empty($email["content"]["plain"]) && empty($email["content"]["html"]) ) {
// es wurde weder Plaintext-Inhalt noch HTML-Inhalt angegeben,
// die Nachricht ist also leer
return false;
}
// Anders als bei einer "normalen" Mail wird bei einer MIME Mail
// alles, was versendet werden soll, in den "Header" gepackt.
// Die einzelnen MIME-Types werden durch eine feste Textzeile
// eine voneinander getrennt, die "boundary". Diese wird hier
// erst einmal aus dem Zeitstempel erzeugt:
$boundary = strtoupper(md5(uniqid(time())));
// Dann wird der Header gef?llt:
$mail_header = "From: ".$email["sender"];
// Hier erh?lt der Mail Client die Information,
// dass es sich um eine MIME Mail handelt...
$mail_header .= "\nMIME-Version: 1.0";
// ...und die Trennkennung - die "boundary" wird mitgeteilt, damit
// die einzelnen Teile nicht als ein Brei verstanden werden
$mail_header .= "\nContent-Type: multipart/alternative; boundary=".$boundary;
$mail_header .= "\n\nThis is a multi-part message in MIME format";
// wenn Plaintext Inhalt angegeben wurde...
if( !empty($email["content"]["plain"]) ){
// ...wird erstmal die "boundary" in den Header geschrieben,
// ein neuer MIME-type beginnt...
$mail_header .= "\n--".$boundary;
// der MIME-type wird angegeben
$mail_header .= "\nContent-Type: text/plain";
// ebenso die Codierung
$mail_header .= "\nContent-Transfer-Encoding: 8bit";
// und dann der eigentliche Inhalt
$mail_header .= "\n\n".$email["content"]["plain"];
}
// wenn HTML-Inhalt angegeben wurde...
if( !empty($email["content"]["html"]) ){
// ...wird erstmal die "boundary" in den Header geschrieben,
// ein neuer MIME-type beginnt...
$mail_header .= "\n--".$boundary;
// MIME-type und Codierung werden angegeben
$mail_header .= "\nContent-Type: text/html";
$mail_header .= "\nContent-Transfer-Encoding: 8bit";
// dann folgt wieder der eigentliche Inhalt
$mail_header .= "\n\n".$email["content"]["html"];
}
// wenn eine Datei zum anh?ngen angegeben wurde...
if( !empty($email["attachment"]) ){
$file = $email["attachment"];
$filename = basename( $file );
// ...existiert die Datei ?berhaupt und ist sie lesbar?
if( @is_file($file) && @is_readable($file) ){
// ja, also wird sie ge?ffnet...
$fp = @fopen( $file, "rb" );
if( $fp ){
// ...und in eine Variable ($buffer) eingelesen,
$buffer = fread( $fp, filesize($file) );
// dann BASE64 codiert, weil es sich bin?re Daten handelt
$buffer = base64_encode( $buffer );
// und auf 72 Zeichen pro Zeile gestutzt.
$buffer = chunk_split( $buffer, 72 );
// Die Datei wird wieder geschlossen, wir sind ja ordentlich.
fclose($fp);
// Jetzt kommt wieder die "boundary" in den Header,
$mail_header .= "\n--".$boundary;
// der MIME-type und hier zus?tzlich der Dateiname werden angegeben.
$mail_header .= "\nContent-Type: application/octet-stream; name=\"".$filename."\"";
// die Codierung ist hier BASE64
$mail_header .= "\nContent-Transfer-Encoding: base64";
// und dem Mail Client wird mitgeteilt, dass es sich um einen Anhang handelt.
$mail_header .= "\nContent-Disposition: attachment; filename=\"".$filename."\"";
// Jetzt folgt die BASE64-codierte Datei
$mail_header .= "\n\n".$buffer;
} else {
// Die Datei konnte nicht ge?ffnet werden
}
}
}
// Jetzt muss die erzeugte Mail nur noch versendet werden.
// der PHP Befehl "mail" wird mit den Parametern
// mail( recipient, subject, body, header ) aufgerufen und
// gibt TRUE oder FALSE zur?ck, dieser R?ckgabewert wird
// einfach weitergeleitet
if( !mail($email["recip"],$email["subject"],"",$mail_header) )
{
return false;
}
else
{
return true;
}
}//Ende function send_MIME_email
Dieser Funktion werden folgende Daten übergeben:
PHP:
$email["recip"] =$email1;
$email["sender"] = 'info@yyyyyy.de';
$email["subject"] ='Deine Anmeldung ';
$email["header"] ='MIME-Version: 1.0 \r\n';
$email["header"] .='Content-Type: text/html; charset=utf-8 \r\n';
$email["content"]["html"] ='Hallo '.$vorname.' !<br><br><br>wir freuen uns, dass Du dich für eine Anmeldung .....<br><br>';
send_MIME_email( $email );
In der Variable $vorname steht ja Tümöß was ja so in der db gespeichert wurde: Tümöß
In der Email sieht das so aus:
Hallo TÌmö� !
wir freuen uns, dass Du dich fÃŒr eine Anmeldung .....
So- Ich hoffe ich habe an alles gedacht und Ihr seht hier durch und könnt mir einen Tip geben.