PHP und das verfluchte UTF-8

punisher86

Mitglied
Hallo Leute,

ich habe ein kleines Mailform um es als kleines Online-Kontakt-Formular zu nutzen.
Das sieht wie folgt aus:
Code:
<html>
<head>
<title>Kontaktformular</title>
</head>
<body>
<?php

$Empfaenger = "mailadresse@mail.de";

if($_REQUEST['Send'])
{
   if(empty($_REQUEST['Name']) || empty($_REQUEST['Email']) || empty($_REQUEST['Nachricht']))
   {
      echo"Bitte gehen Sie <a href=\"javascript:history.back();\">zurück</a> und füllen Sie alle Felder aus!";
   }
   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']);
      echo"Vielen Dank für Ihre eMail!";
   }
}
else
{
   echo"Ein Fehler ist aufgetreten. Bitte gehen Sie auf diese <a href=\"kontaktformular.php\">Seite</a>.";
}

?>
</body>
</html>

Und dann halt eine html-form wo auch :

Code:
<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=utf-8">

drinne steht und irgendwie werden natürlich alle Ö,Ä,Ü etc nicht richtig angezeigt in der Mail.

Wie funktioniert das genau? Ich habe was von encode und decode gelesen, kam damit aber nicht genau zurecht.

MFG
 
Es gibt die Charsets an 3 Stellen, kontroliere mal alle.

  1. im HTML Header
  2. Der Zeichensatz in dem die .php Datei gespeichert ist.
  3. in dem was der Webserver sendet. Das kannst du per header() beeinflussen

Wenn du eine Datenbank verwendest kann man auch hier ein Connection Encoding festlegen.

Wenn das nicht alles übereinstimmt bekommt man immer wieder Probleme. Da du die HTML Headerbefehle richtig hast, würde ich als nächstes in deinem Editor nach dem Zeichensatz schauen.

und zu der frage.. es gibt funtionen utf8_encode und utf8_decode aber die sind für 90% der inhalte unnötig und wenn man mit den anderen dingen arbeitet macht man es sich viel einfacher.
 
Hallo Michael,

danke für deine Antwort. Also im HTML hab ich den Metatag drinne und die PHP datei hab ich mit notepad ++ in UTF-8 Format gespeichert. Dann wird es wohl so sein das ich es mit dem sogenannten header() beeinflussen muss?

Allerdings weiß ich nicht genau wie das geht. Ich habe mal folgendes probiert:
Code:
header("Content-Type: text/html; charset=utf-8");

Brachte aber leider kein Erfolg :rolleyes:

edit:
anstatt utf-8 habe ich auch mal ISO-8859-1 probiert aber auch ohne erfolg
 
Zuletzt bearbeitet:
Du könntest über den 5. Parameter der mail Funktion den Enconding angeben.
PHP:
bool mail  ( string $to  , string $subject  , string $message  [, string $additional_headers  [, string $additional_parameters  ]] )
 
Sorry, das geht doch anders. Teste es mal mit dem Beispiel:
PHP:
<?PHP
$mime_boundary = "----MSA Shipping----".md5(time());
$to = "";
$subject = "";
$headers = "From: foo <foo@example.com>\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/alternative; boundary=\"$mime_boundary\"\n";
....
$message .= "--$mime_boundary\n";
$message .= "Content-Type: text/html; charset=UTF-8\n";
$message .= "Content-Transfer-Encoding: 8bit\n\n";
$mail_sent = @mail( $to, $subject, $message, $headers );
?>
 
Ich habs jetzt mal so gemacht:

PHP:
<?php

$mime_boundary = "----MSA Shipping----".md5(time());
$headers = "From: OnlineFormular\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/alternative; boundary=\"$mime_boundary\"\n";
$headers .= "--$mime_boundary\n";
$headers .= "Content-Type: text/html; charset=UTF-8\n";
$headers .= "Content-Transfer-Encoding: 8bit\n\n"; 

$Empfaenger = "adresse@mail.com";

if($_REQUEST['Send'])
{
   if(empty($_REQUEST['Name']) || empty($_REQUEST['Email']) || empty($_REQUEST['Nachricht']))
   {
      echo"Bitte gehen Sie <a href=\"javascript:history.back();\">zurück</a> und füllen Sie alle Felder aus!";
   }
   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 = "Nachricht des Online-Kontakt-Formulars";
      $Mailbetreff .= $_REQUEST['Betreff'];
      mail($headers, $Empfaenger, $Mailbetreff, $Mailnachricht, "From: ".$_REQUEST['Email']);
      echo"Vielen Dank für Ihre eMail!";
   }
}
else
{
   echo"Ein Fehler ist aufgetreten. Bitte gehen Sie auf diese <a href=\"kontaktformular.php\">Seite</a>.";
}

?>

Allerdings kommt dann keine Mail an :-) Es ist zum verrückt werden :suspekt:
 
Zuletzt bearbeitet:
hmm ich hab jez mal überlegt. Könnte es an der While-Schleife liegen das der des nicht richtig macht? Wüsste sonst nicht woran es liegt.

MFG
 
Zurück