• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

PHP mail() - Sonderzeichen

nascituruz

Neues Mitglied
Hi,

ich habe mich schon durch etliche Foren gewühlt und irgendwie nix gefunden, was dem Formular welches ich benutze beibringt, Umlaute als Umlaute zu senden

Ich hab den betreffenden Code mal mit angefügt

PHP:
<?php
session_start();
 
//if(get_magic_quotes_gpc()){
 //stripslashen weil $_POST-Variablen automatisch escaped werden, wenn get_magic_quotes_gpc() aktiv ist
  //foreach($_POST as $key => $value) {
   //htmlentities() = wandelt alle geeigneten Zeichen in entsprechende HTML-Codes um
   //trim()   = alle Leerzeichen am Anfang und Ende des Strings entfernen
    //  $_POST[$key] = htmlentities(trim(stripslashes($value)),ENT_QUOTES);
 // }
//}else{
 //foreach($_POST as $key => $value) {
  //$_POST[$key] = htmlentities(trim($value),ENT_QUOTES);
 //}
//}
?>
<?php
$red = 'class="errorform"'; //bei Fehler roten Rahmen um Inputfeld zeichnen
setlocale(LC_ALL, 'de_DE'); //damit auch deutsche Umlaute etc. berücksichtigt werden
if(isset($_POST['senden'])){ //Wurde der Senden-Button gedrückt?
 //bei leeren Feldern eine Fehlermeldung ausgeben
 if(empty($_POST['name'])){$msg='Bitte Namen eingeben'; $errname=$red;}
 else
 if (!preg_match('/^[[:print:]]{5,}$/', $_POST['name'])){$msg='Ungültige, oder zu wenige Zeichen im Namen!'; $errname=$red;}
 else
 if(empty($_POST['email'])){$msg='Bitte Email eingeben'; $errmail=$red;}
 else
 if (!preg_match('/^[^@\s]+@([-a-z0-9]+\.)+[a-z]{2,}$/i', $_POST['email'])){$msg='Ungültiges Emailformat!'; $errmail=$red;}
 else
 if (!preg_match('/^[+0-9-]{3,}([\s\/\]?[0-9]{3,})$/', $_POST['telefon'])){$msg='Ungültige Telefonnummer'; $errtel=$red;}
 else
 if(empty($_POST['kommentar'])){$msg='Bitte Kommentar eingeben'; $errkom=$red;}
 else
 if (!preg_match('/^[[:print:][:space:]]{20,}$/', $_POST['kommentar'])){$msg='Ungültige, oder zu wenige Zeichen im Kommentar!'; $errkom=$red;}
 else{ //alles OK
  ### Konfiguration ###
# Bitte passen Sie die folgenden Werte an, bevor Sie das Script benutzen!
# An welche Adresse sollen die Mails gesendet werden?
$strEmpfaenger = '[email protected]';
# Welche Adresse soll als Absender angegeben werden?
# (Manche Hoster lassen diese Angabe vor dem Versenden der Mail ueberschreiben)
$strFrom       = '"Kontaktformular" <[email protected]>';
# Welchen Betreff sollen die Mails erhalten?
$strSubject    = 'Kontaktanfrage von sender.de';
# Zu welcher Seite soll als "Danke-Seite" weitergeleitet werden?
# Wichtig: Sie muessen hier eine gueltige HTTP-Adresse angeben!
$strReturnhtml = 'http://danke.html';
# Welche(s) Zeichen soll(en) zwischen dem Feldnamen und dem angegebenen Wert stehen?
$strDelimiter  = ":\t";
### Ende Konfiguration ###
if($_POST)
{
 $strMailtext = "";
 while(list($strName,$value) = each($_POST))
 {
  if(is_array($value))
  {
   foreach($value as $value_array)
   {
    $strMailtext .= $strName.$strDelimiter.$value_array."\n";
   }
  }
  else
  {
   $strMailtext .= $strName.$strDelimiter.$value."\n";
  }
 }
 if(get_magic_quotes_gpc())
 {
  $strMailtext = stripslashes($strMailtext);
 }
$Name = "sender.de"; //senders name
$email = "[email protected]"; //senders e-mail adress
$recipient = $_POST['email']; //recipient
$mail_body = "Ich habe Ihre Email erhalten und werde schnellstmöglich antworten. Vielen Dank!"; //mail body
$subject = "sender.de - Kontaktformular"; //subject
$header = "von: ". $Name . " <" . $email . ">\r\n"; //optional headerfields
$header  = 'MIME-Version: 1.0' . "\r\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
// zusätzliche Header
mail($recipient, $subject, $mail_body, $header); //mail command :)
mail($strEmpfaenger, $strSubject, $strMailtext, "von: ".$strFrom)
or die("Die Mail konnte nicht versendet werden. Bitte versuchen Sie es später noch einmal!");
echo "hat geklappt";
exit;
};
  /*
   ab hier können die Formulardaten weiterverarbeitet werden.
   Zum Einfügen in eine MySQL-Datenbank sollte unbedingt mysql_real_escape_string() verwendet werden!
   $sql = "INSERT INTO gaestebuch
                (name, email, kommentar)
            VALUES
                ('".mysql_real_escape_string($_POST['name'])."',
                '".mysql_real_escape_string($_POST['email'])."',
                '".mysql_real_escape_string($_POST['telefon'])."'
                '".mysql_real_escape_string($_POST['kommentar'])."')"; 
  */
  //alle verwendeten POST-Variablen wieder löschen
  $_POST['name']=''; $_POST['email']='';$_POST['telefon']=''; $_POST['kommentar']=''; $_POST['pruefcode']='';
 }
 //evtl. Fehler ausgeben
 }
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<form id="form1" method="post" action="<?php $PHP_SELF ?>"><p>
 <label for="name">Name:</label><span> *</span><br />
 <input <?=$errname;?> type="text" name="name" id="name" value="<?=$_POST['name'];?>" /><br /><br />
 <label for="email">Email:<span> *</span></label><br />
 <input <?=$errmail;?> type="text" name="email" id="email" value="<?=$_POST['email'];?>" /><br /><br />
 <label for="telefon">Telefon:</label><span> *</span><br />
 <input <?=$errtel;?> type="text" name="telefon" id="telefon" value="<?=$_POST['telefon'];?>" /><br /><br />
 <label for="kommentar">Kommentar:<span> *</span></label><br />
 <textarea <?=$errkom;?> name="kommentar" id="kommentar" cols="40" rows="12"><?=$_POST['kommentar'];?></textarea><br />
 <span>*</span>Diese Felder müssen ausgefüllt werden!
</p>
<div>
 <?if(!empty($msg)){echo '<p class="redfont fett">'.$msg.'</p>';}
?><input type="submit" class="button" name="senden" id="senden" value="Senden" />
 </div>
</form>
</body>
</html>
 
Werbung:
PHP: mail - Manual

3ter parameter der funktion: string $additional_headers

dort kannst du deine eigennen header an geben in dem du z.b. das charset angibst, dann kann der auf der gegenseite auch lesen was du ihm schickst ^^
 
Werbung:
Funktioniert es mit charset=utf-8 ?

Ja, das habe ich geändert, jetzt stimmt die Benachrichtigung, aber die Mail die ich kriegen soll die stimmt noch nicht :(

PHP:
$header  = 'MIME-Version: 1.0' . "\r\n";
$header .= 'Content-type: text/html; charset=utf-8' . "\r\n";
// zusätzliche Header
mail($recipient, $subject, $mail_body, $header); //mail command :)
mail($strEmpfaenger, $strSubject, $strMailtext, "von: ".$strFrom)

Also erste Mailfunktion jetzt mit Umlauten, zweite weiterhin nicht
 
So?

Das geht aber auch nicht?!

PHP:
$header  = 'MIME-Version: 1.0' . "\r\n";
$header .= 'Content-type: text/plain; charset=utf-8' . "\r\n";
// zusätzliche Header
mail($recipient, $subject, $mail_body, $header); //mail command :)
mail($strEmpfaenger, $strSubject, $strMailtext, "von: ".$strFrom, "Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8")
"
 
Werbung:
Nein,

jetzt zähl mal die Anzahl der Parameter und schau dir im Manual mal das Beispiel #4 an :arrow: PHP: mail - Manual

Slibbo hat dich darauf auch bereits hingewiesen (allerdings ist es der 4. Parameter, nicht der 3. ;) ) Im Beispiel #4 siehst du, was du dem Parameter übergeben solltest.
 
Zuletzt bearbeitet:
So, habs jetzt hinbekommen aber fragt mich nicht wie, an der Reihenfolge lags zum Teil aber nicht ausschließlich, hab mich in dem Post nur vertan, habs auch schon in der richtigen Reihenfolge probiert (zu meiner Verteidigung), jedenfalls Danke für die Hilfe!

Grüße ;)
 
Zurück
Oben