Seite 1 von 2

(gelöst) Kontaktformular mit Umlauten

Verfasst: Di 26. Apr 2011, 08:50
von ImmoF
Ich nutze ein modifiziertes Kontaktformular in meiner Installation. Leider werden im Formular keine Umlaute übertragen. Weiss jemand, wie ich das Formular dazu bringen könnte, auch Umlaute aus den Felder zu übernehmen?

Output:

Code: Alles auswählen

<?php
/**
* $RCSfile$
*
* Description: Contact Form Output
*
* @version 1.0.0
* @author Andreas Lindner
* @copyright four for business AG <www.4fb.de>
*
* {@internal
* created 2005-08-12
* modified 2008-04-11 Rudi Bieller Changes concerning new layout
* }}
*
* $Id$
*/

#Includes
cInclude("classes", "class.phpmailer.php");

if (!isset($tpl) || !is_object($tpl)) {
    $tpl = new Template();
}

if (!isset ($_POST['send'])) {
    #Form has not been sent yet
    cInclude('classes', 'class.article.php');
    cInclude('classes', 'class.template.php');
//------------------------------------------------------------------------------
$zahl1 = rand(1, 20);
$zahl2 = rand(1, 11);
$ergebnis = ($zahl1 + $zahl2);
//------------------------------------------------------------------------------

    #Create contact form
    $sFormAction = $sess->url("front_content.php?idcat=$idcat&idart=$idart&parentid=$parentid");
    $tpl->set("s", 'form_action', $sFormAction);
    $tpl->set("s", 'ERGEBNIS', $ergebnis);
 //   $tpl->set("s", "ANREDE", mi18n("Anrede"));
 //   $tpl->set("s", "ANREDE_OPTION1", mi18n("Herr"));
 //   $tpl->set("s", "ANREDE_OPTION2", mi18n("Frau"));
    $tpl->set("s", "NAME", mi18n("Name"));
 //   $tpl->set("s", "VORNAME", mi18n("Vorname"));
    $tpl->set("s", "FIRMA", mi18n("Firma"));
 //   $tpl->set("s", "STRASSE", mi18n("Straße/Nr."));
 //   $tpl->set("s", "PLZORT", mi18n("PLZ/Ort"));
 //   $tpl->set("s", "TELEFON", mi18n("Telefon"));
    $tpl->set("s", "EMAIL", mi18n("E-Mail"));
    $tpl->set("s", "ANLIEGEN", mi18n("Nachricht"));
    $tpl->set("s", "SPAMTEXT", "Ergebnis eintragen: ");
    $tpl->set("s", 'SPAMSCHUTZ_1', $zahl1);
    $tpl->set("s", 'SPAMSCHUTZ_2', $zahl2);
    $tpl->set("s", "PFLICHTFELDER", mi18n("Bitte alle Felder ausfüllen"));
    $tpl->set("s", "ABSCHICKEN", mi18n("abschicken"));
  //  $tpl->set("s", "LOESCHEN", mi18n("löschen"));

    $tpl->generate($cfgClient[$client]["path"]["frontend"]."templates/kontaktformular.html");
} elseif ($_POST['send'] == 1) {
    #Form has been sent

    #Check user input
    $noerrors = true;
    $msg = '';
    $test1 = $_POST['spam'];
    $test2 = $_POST['ergebnis'];
   if ($_POST['spam'] <> $_POST['ergebnis']) {
      $noerrors = false;
    $msg .= mi18n("Bitte rechnen Sie richtig!")."<br/>";
   }   
 
    if ($_POST['Name'] == '') {
        $noerrors = false;
        $msg .= mi18n("Bitte geben Sie Ihren Namen ein!")."<br/>";
    }
   
$email = $_POST['EMail'] ;
$name = $_POST['Name'] ;
$subject = $_POST['subject'] ;

 if ($_POST['EMail'] == '') {
        $noerrors = false;
        $msg .= mi18n("Bitte geben Sie Ihre E-Mail-Adresse ein!")."<br/>";
    }
  

    if ($noerrors == false) {
echo "<div id='infobox' class='infobox infored'>";
echo "<img src='http://xxxxxx.de/cms/images/icons/info_attention_red.png'>";
        echo "<p>";
        #Errors have been found
        echo "<strong>".mi18n("Beim Versenden sind folgende Fehler aufgetreten:")."</strong><br/>";
        echo $msg.'<br/>';
        echo '<a href="javascript:history.back();">&lsaquo; '.mi18n("zur&uuml;ck").'</a>';
echo "</div>";
echo "<script language='JavaScript'>document.getElementById('infobox').scrollIntoView(true);</script>";

    } else {
        #No errors, create and send mail
        $mail = new phpmailer;
  //      $mail_body = '<html><head></head><body bgcolor="#ffffff">';

        if (is_array($_POST)) {
            foreach ($_POST as $key => $value) {
                if ($key != 'send') {
                    $mail_body .= "$value\n\n";
                }
            }
        }

 //       $mail_body .= '</bo'.'dy></html>';
        $mail->Host = "localhost";
        $mail->IsHTML(true);

        #Get mailer from settings


$from="From:".$email."\n";
$from .= "Reply-To: ".$email."\n";
$from .= "X-Mailer: PHP/" . phpversion(). "\n";
$from .= "X-Sender-IP: $REMOTE_ADDR\n";
$from .= "Content-Type: text/html";

mail('xxxx@xxxxxn.de', $subject, $mail_body, $from);

    
#Display message after mail is sent
 echo mi18n("<div id='infobox' class='infobox infogreen'><img src='http://xxxxxxx.de/cms/images/icons/info_checkmark_green.png'><h3>Ihre Anfrage wurde uns übermittelt.</h3>
<p>Vielen Dank! Wir melden uns bald bei Ihnen.")."</p></div>";
 echo "<script language='JavaScript'>document.getElementById('infobox').scrollIntoView(true);</script>";
    }
}
?>


Re: Kontaktformular mit Umlauten

Verfasst: Do 28. Apr 2011, 08:41
von ImmoF
Hat denn niemand sonst das Problem, dass die Umlaute in der E-Mail mit den Formulardaten nicht dargestellt werden? Es ist ja am Ende das Standard-Kontaktformular, das ich nutze, nur eben mit dem Spamschutz.

Re: Kontaktformular mit Umlauten

Verfasst: Do 28. Apr 2011, 11:41
von McHubi
Tritt das Problem nur bei diesem Formular auf oder auch bei anderen? (also keine abgewandelten Versionen von diesem...)

Re: Kontaktformular mit Umlauten

Verfasst: Do 28. Apr 2011, 12:11
von ImmoF
Wie meinst Du das genau? Es ist ja das Original Contenido-Formular contact_form, nur eben mit dem Zusatz des Spamschutzes, der das aber nicht beeinflussen duerfte. Es tritt auch beim Formular ohne Spamschutz auf.

Auf der Webseite im Frontend oder Backend werden Umlaute jedoch richtig angezeigt.

Re: Kontaktformular mit Umlauten

Verfasst: Do 28. Apr 2011, 13:51
von McHubi
Es gibt ja zahlreiche andere Kontaktformulare hier im Forum. Wenn Du eines davon testweise einbaust und dort das Problem nicht auftaucht, dann wird's wohl irgendwie am Modul liegen. Wenn doch, dann sollte das Prob unabhängig vom Modul bestehen. Wenn die Umlaute also erst im "Mailprogramm" nicht mehr vernünftig dargestellt werden, kann es auch an diesem bzw. dem verwendeten Zeichensatz liegen...

Re: Kontaktformular mit Umlauten

Verfasst: Sa 30. Apr 2011, 09:06
von ImmoF
Wie kann ich den Zeichensatz in diesem Formular, dass an sich jeder Contenido-Entwickler in und auswendig kennen muesste, aendern? Der Zeichensatz auf der Seite ist richtig. Wo legt das Formular den Zeichensatz fest, bzw. wie kann ich ggf. die Formularfelder filtern, so dass ich die Umlaute einfach rausnehmen?

Re: Kontaktformular mit Umlauten

Verfasst: Sa 30. Apr 2011, 09:30
von Dodger77
Setze doch mal die akzeptierte Zeichenkodierung im Modul-Template:

http://de.selfhtml.org/html/formulare/d ... nkodierung

Da stehen auch noch ein paar weitere Hinweise zu dem Thema.

Weiterhin kann man natürlich auch das Charset in der E-Mail ändern. Das Modul verwendet ja den phpmailer zum Versenden, da müsste also folgendes reichen:

Code: Alles auswählen

$mail->CharSet = $encoding[$lang];
ImmoF hat geschrieben:..., dass an sich jeder Contenido-Entwickler in und auswendig kennen muesste, ...
Ich bin mir nicht sicher, ob das so ist. Die meisten Entwickler setzen die Module des Beispielmandanten vermutlich kaum ein.

Re: Kontaktformular mit Umlauten

Verfasst: Sa 30. Apr 2011, 18:16
von Spider IT
Dodger77 hat geschrieben:
ImmoF hat geschrieben:..., dass an sich jeder Contenido-Entwickler in und auswendig kennen muesste, ...
Ich bin mir nicht sicher, ob das so ist. Die meisten Entwickler setzen die Module des Beispielmandanten vermutlich kaum ein.
Richtig!
Installation ohne Mandant, Mandant anlegen, Module installieren und gut.
Die meisten von uns eingesetzten Module sind sogar verbesserte 4.6er Module, die 4.8er nutzen wir überhaupt nicht.

Gruß
René

Re: Kontaktformular mit Umlauten

Verfasst: Mo 2. Mai 2011, 09:51
von ImmoF
Ich habe das so eben einmal versucht. Leider ohne Erfolg. Dabei ist mir aufgefallen, dass nur die Inhalte in der Textarea, also nicht Subject etc. keine Umlaute haben. Ich vermute, das hängt mit dem Auslesen der Felder zusammen. Verantwortlich dafür wird dieser Bereich sein:

Code: Alles auswählen

$mail->CharSet = $encoding[$lang];
$mail = new phpmailer;
        if (is_array($_POST)) {
            foreach ($_POST as $key => $value) {
                if ($key != 'send') {
                    $mail_body .= "$value\n\n";
                }
            }
        }
 $mail->Host = "localhost";
 $mail->IsHTML(true);
Kann man dies irgendwie beeinflussen? Der Zeichensatz scheint ja zu stimmen, da die Umlaute im Subject und auf der Seite richtig dargestellt werden.

Re: Kontaktformular mit Umlauten

Verfasst: Mo 2. Mai 2011, 10:14
von Spider IT
Das Subject einer eMail wird, falls Sonderzeichen (außerhalb der Base64) enthalten sind, enkodiert (meist Quoted Printable).
Das heißt, dass du daran nicht sehen kannst, ob der Zeichensatz richtig ist.
Versuch es mal als HTML-Mail:

Code: Alles auswählen

        $mail = new phpmailer;
        $mail_body = '<html><head></head><body bgcolor="#ffffff"><table cellspacing="0" cellpadding="2" border="0">';

        if (is_array($_POST)) {
            foreach ($_POST as $key => $value) {
                if ($key != 'send') {
                    $mail_body .= "<tr><td>$key</td><td>$value</td></tr>";
                }
            }
        }

        $mail_body .= '</table></bo'.'dy></html>';
        $mail->Host = "localhost";
        $mail->IsHTML(true);
Dann kannst du sogar noch im Head-Bereich des HTML-Codes den Zeichensatz aus dem Quelltext deiner Seite mit angeben.

Gruß
René

Re: Kontaktformular mit Umlauten

Verfasst: Mo 2. Mai 2011, 10:45
von ImmoF
Im Original hat das Kontaktformular ja das HTML-Format. Ich habe das jetzt wieder so umgesetzt. Leider kein Erfolg. Am Subject ist der Umlaut da und beim Textfeld in der textaerea nicht. Ich denke, es liegt am Auslesen oder Übergabe der Werte aus dem Formular und eher nicht am Mailformat. Die Umlaute kommen da gar nicht an.

Re: Kontaktformular mit Umlauten

Verfasst: Mo 2. Mai 2011, 14:46
von Spider IT
Bist du dir sicher, dass du dir alles hier geschriebene durchgelesen hast, insbesondere was den Subject angeht? :wink:
Du kannst es, was den Content angeht, zusätzlich noch mit htmlentities() versuchen:

Code: Alles auswählen

$mail_body .= "<tr><td>$key</td><td>" . htmlentities($value) . "</td></tr>";
Gruß
René

Re: Kontaktformular mit Umlauten

Verfasst: Mo 2. Mai 2011, 15:03
von ImmoF
Perfekt. Das wars. Umlaute alle da. Besten Dank!

Re: Kontaktformular mit Umlauten

Verfasst: Mo 2. Mai 2011, 17:14
von Oldperl
ImmoF hat geschrieben:Umlaute alle da.
Zumindest solange man seinen Emailclient auf HTML-Emails stehen läßt, bei "nur Text"-Anzeige sollte das Problem mit den Umlauten weiterhin bestehen. Eine Kombination aus utf8_encode() und Setzen des Mailer-Encodings sollte hier helfen.
Eventuell mal eine aktuellere phpMailer-Klasse versuchen. :arrow: http://forum.contenido.org/viewtopic.ph ... 91#p145764

Gruß aus Franken

Ortwin

Re: (gelöst) Kontaktformular mit Umlauten

Verfasst: Di 31. Mär 2015, 18:19
von steve04
Hallo,
hab nicht viel Ahnung, aber bei mir hat geholfen, dass ich in
contenido/classes/class.phpmailer.php
bei den Zeilen

Code: Alles auswählen

    /**
     * Sets the CharSet of the message.
     * @var string
     */
 var $CharSet           = "iso-8859-1";
geändert habe in:

Code: Alles auswählen

var $CharSet           = "utf-8";