Doctype Problem in Php-Formular
php_noob
- php
Hallo zusammen,
ich habe ein Problem, ich habe ein einfaches Php-Skript geschrieben, was ein Kontaktformular auswertet, allerdings funktioniert es nicht richtig. Die Umlaute werden nicht erkannt und so zB als ö ausgegeben. So sieht der Code aus, was kann ich tun, damit die Zeichen richtig dargestellt werden?
Freu mich über eure Hilfe!
Lg
<?php
$Empfaenger = "name@domain.de";
if($_REQUEST['Send'])
{
if
(
empty($_REQUEST['name']) ||
empty($_REQUEST['vorname']) ||
empty($_REQUEST['email']) ||
empty($_REQUEST['nachricht'])
)
{
header('Location: http://www.google.de');
exit(0); // Sicherheitsmacro
}
else
{
$Mailnachricht = "Sie haben folgende Nachricht erhalten: \n\n";
while(list($Formularfeld, $Wert)=each($_REQUEST))
{
if($Formularfeld!="Send")
{
$Mailnachricht .= $Formularfeld.": ".$Wert."\n";
}
}
$Mailnachricht .= "\nDatum/Zeit: ";
$Mailnachricht .= date("d.m.Y H:i:s");
$Mailbetreff = "Kontakt: ";
$Mailbetreff .= $_REQUEST['Betreff'];
mail($Empfaenger, $Mailbetreff, $Mailnachricht, "From: ".$_REQUEST['Email']);
header('Location: http://www.google.de');
exit(0); // Sicherheitsmacro
}
}
else
{
header('Location: http://www.google.de');
exit(0); // Sicherheitsmacro
}
?>
Achja, vllt noch als Zusatz, ich meinte natürlich nicht ausgegeben, sondern dann in der Mail so dargestellt.
Tach!
Die Umlaute werden nicht erkannt und so zB als ö ausgegeben. So sieht der Code aus, was kann ich tun, damit die Zeichen richtig dargestellt werden?
Automatisch geht das selten gut. Du musst a) eine definierte Kodierung verwenden und b) diese dem Empfänger mitteilen. Für den Body der Mail gibt es die charset-Angabe in der Content-Type-Header-Zeile. Für Nicht-ASCII-Zeichen in den Header-Zeilen ist eine besondere Kodierung notwendig.
mail($Empfaenger, $Mailbetreff, $Mailnachricht, "From: ".$_REQUEST['Email']);
Wenn du in die zusätzlichen Headerzeilen (hier bei From) ohne weitere Behandlung eine Benutzereingabe einfügst, baust du dir eine ausnutzbare Spam-Schleuder.
Dazu und zur Header-Zeilen-Kodierung steht etwas im Abschnitt E-Mail des Kontextwechsel-Artikels.
dedlfix.
Automatisch geht das selten gut. Du musst a) eine definierte Kodierung verwenden und b) diese dem Empfänger mitteilen. Für den Body der Mail gibt es die charset-Angabe in der Content-Type-Header-Zeile. Für Nicht-ASCII-Zeichen in den Header-Zeilen ist eine besondere Kodierung notwendig.
Kann ich denn so ohne weiteres zB die UTF-8 Codierung verwenden? Also quasi das <meta http-equiv="content-type" content="text/html;charset=utf-8" />
oben in die Datei einbauen?
Wenn du in die zusätzlichen Headerzeilen (hier bei From) ohne weitere Behandlung eine Benutzereingabe einfügst, baust du dir eine ausnutzbare Spam-Schleuder.
Stimmt! Werd versuchen die Abfrage noch reinzubasteln, danke!
lg
@@php_noob:
nuqneH
Kann ich denn so ohne weiteres zB die UTF-8 Codierung verwenden?
Du kannst nicht nur UTF-8 verwenden, du solltest das auch tun. Immer und überall.
Allerdings nicht ohne Weiteres. Dafür aber ohne BOM.
Qapla'
Tach!
Kann ich denn so ohne weiteres zB die UTF-8 Codierung verwenden? Also quasi das
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
oben in die Datei einbauen?
Das ist für HTML-Dokumente. Für die Mail wäre ein Header (ähnlich wie die From-Angabe) hinzuzufügen. Für Nur-Text-Mails wäre das
Content-Type: text/plain; charset=utf-8
Du solltest darauf achten, dass in der gesamten Verarbeitungskette die Zeichenkodierung zum einen angegeben und zum anderen verwendet wird. Wie man sie angibt, beschreiben die (noch nicht vollständigen) SELFHTML-Wiki-Seiten unter Themen:Zeichencodierung. Achte genau auf Übergabestellen, also Webserver zu Browser, Browser zu Webserver, PHP zu Datenbank und so weiter. An jeder dieser Nahtstellen ist eine Angabe für den Empfänger zu machen. Finde diese Stellen und wenn du ncith findest, wie man da die Kodierung deklariert, frag nochmal nach.
dedlfix.