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

Sonderzeichen wie Umlaute werden im Formmailer falsch versendet

cyrille1985

Neues Mitglied
Hallo, ich arbeite gerade an einem Projekt: LUEX asbl
In der Rubrik "CONTACT" gibt es ein Kontaktformular indem man Infos wie Name, eMail und Message senden kann. Die Daten kommen zwar korrekt im eMail-Postfach an, allerdings werden Sonderzeichen wie zB é à ü ä ö durch falsche Zeichen ersetzt (wie das so ist wenn man Sonderzeichen im HTML-Code nicht korrekt eingibt).
Aus "Über die Message könnte man noch längere Zeit reden." wird dann "Ãœber die Message könnte man noch längere Zeit reden."

Ich habe in der Datei process.php nachgeschaut und für mich könnte eventuell die Zeile 53 interessant sein: $mail->IsHTML(true);
Allerdings, wenn ich da was ändere dann wird die ganze eMail nicht mehr im HTML-Format versendet, was allerdings gebraucht wird da die eMail als Tabelle angezeigt wird.
Deswegen meine Frage: Gibt es die Möglichkeit, für die 3 Eingabefelder festzulegen, dass es KEIN HTML ist sondern einfacher Text?

Für jeden Tip bin ich euch dankbar :)

Hier noch die Innenansicht der Datei process.php :

PHP:
<?php
if ((isset($_POST['name'])) && (strlen(trim($_POST['name'])) > 0)) {
    $name = stripslashes(strip_tags($_POST['name']));
} else {$name = 'No name entered';}
if ((isset($_POST['email'])) && (strlen(trim($_POST['email'])) > 0)) {
    $email = stripslashes(strip_tags($_POST['email']));
} else {$email = 'No email entered';}
if ((isset($_POST['phone'])) && (strlen(trim($_POST['phone'])) > 0)) {
    $phone = stripslashes(strip_tags($_POST['phone']));
} else {$phone = 'No phone entered';}
ob_start();
?>
<html>
<head>
<style type="text/css">
</style>
</head>
<body>
<table width="550" border="1" cellspacing="2" cellpadding="2">
  <tr bgcolor="#eeffee">
    <td>Name</td>
    <td><?=$name;?></td>
  </tr>
  <tr bgcolor="#eeeeff">
    <td>Email</td>
    <td><?=$email;?></td>
  </tr>
  <tr bgcolor="#eeffee">
    <td>Message</td>
    <td><?=$phone;?></td>
  </tr>
</table>
</body>
</html>
<?
$body = ob_get_contents();

$to = '[email protected]';
$email = '[email protected]';
$fromaddress = "[email protected]";
$fromname = "Online Contact";

require("phpmailer.php");

$mail = new PHPMailer();

$mail->From     = "[email protected]";
$mail->FromName = "LUEX.ORG";
$mail->AddAddress("[email protected]","Name 1");
$mail->AddAddress("[email protected]","Name 2");

$mail->WordWrap = 50;
$mail->IsHTML(true);

$mail->Subject  =  "Formulaire de contact envoye";
$mail->Body     =  $body;
$mail->AltBody  =  "This is the text-only body";

if(!$mail->Send()) {
    $recipient = '[email protected]';
    $subject = 'Contact form failed';
    $content = $body;    
  mail($recipient, $subject, $content, "From: [email protected]\r\nReply-To: $email\r\nX-Mailer: DT_formmail");
  exit;
}
?>
 
Wie wäre es, wenn du in deinem HTML ein <meta > addierst und dort den richtigen Zeichensatz angibst. Schreib doch mal den $body als Datei dumpbody.htm raus und schau, ob die denn richtig angezeigt wird.
 
Die meta-Angabe reicht ggfs. gar nicht. Du müsstest auch kontrollieren was für ein Zeichensatz der Server, auf dem die Datei liegt und über den sie aufgerufen wird, im Header zurück gibt. Das kann man z.B. mit den Seiteneigenschaften im Firefox und anderen Browsern einsehen, oder mit verschiedenen Erweiterungen für den Browser.

Wenn Du sichergehen willst, dass der richtige Zeichensatz, den Du auch willst, verwendet wirst, kannst Du ihn auch per PHP-Funktion header() setzen.

Außerdem solltest Du beim Mailversand den Zeichensatz für die E-Mail festlegen. Wie das geht sollte in der Hilfe zu dem PHPMailer, den Du verwendest, stehen.
 
Bei mir hat es gereicht, wenn ich im meta UTF-8 setze und sonst noch ein paar kleine Ersetzungen, um im Formular empfangene Sonderzeichen (wie Umlaute oder < > aus einer Textbox) richtig darzustellen. Ganz grob hat für die Formularfelder gereicht:

Code:
   $value     = htmlspecialchars($_POST['key']);
   $value     = str_replace( " ", "xxx20xxx", $value); 
   $value     = urlencode($value);
   $value     = str_replace( "xxx20xxx", " ", $value);
Wobei das natürlich etwas unsauber ist, das Umwandeln von Leerzeichen nach + durch den hartkodierten Platzhalter 'xxx20xxx' zu verhindern. Aber ich wollte nicht noch ewig forschen :-). Danach wurden zumindest Umlaute und diverse Sonderzeichen in der HTML-Mail schön angezeigt. Testen kannst das mal unter Mühlespiel - Turniere/Berichte EM Ankündigung, aber schreib in die Bemerkung, dass es nur ein Test ist, sonst springt die Sekretärin im Dreieck, oder du musst mitspielen.
 
Vorsicht: der Code von NetAktiv erfordert auch eine entsprechende E-Mail-Kodierung und wird sicher nicht in jedem Fall funktionieren. Wenn man sich darauf konzentriert überall einheitlich einen Zeichensatz zu verwenden und diesen auch beim E-Mail-Versand konfiguriert, muss man nicht solche Kunststückchen machen.
 
Kunststücke muss man irgendwie immer machen, wenn man keine Entities senden will, schon alleine weil sich beispielsweise text-input und textarea völlig unterschiedlich verhalten. Meine Lösung hat nach ein paar Tests befriedigende Ergebnisse gebracht und war für meine Zwecke ausreichend, schließlich habe ich keinen kommerziellen Anspruch. Außerdem soll das keine fertige Lösung sein sondern nur Ideen liefern, in welche Richtung man probieren kann.
 
Danke für die Hinweise & Antworten.

Habe allerdings dank dem Hinweis des Zeichsatzes nochmals nachgekuckt und in der Datei phpmailer.php die Zeile

var $CharSet = "iso-8859-1";

durch

var $CharSet = "UTF-8";

ersetzt.



Vielen Dank für ihre Hilfe!
LG Cyr!lle.
 
Zuletzt bearbeitet:
Zurück
Oben