(gelöst) Kontaktformular mit Umlauten

ImmoF
Beiträge: 174
Registriert: Do 26. Jun 2003, 18:33
Kontaktdaten:

(gelöst) Kontaktformular mit Umlauten

Beitrag von ImmoF » Di 26. Apr 2011, 08:50

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>";
    }
}
?>

Zuletzt geändert von ImmoF am Mo 2. Mai 2011, 15:03, insgesamt 1-mal geändert.

ImmoF
Beiträge: 174
Registriert: Do 26. Jun 2003, 18:33
Kontaktdaten:

Re: Kontaktformular mit Umlauten

Beitrag von ImmoF » Do 28. Apr 2011, 08:41

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.

McHubi
Beiträge: 1080
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Kontaktformular mit Umlauten

Beitrag von McHubi » Do 28. Apr 2011, 11:41

Tritt das Problem nur bei diesem Formular auf oder auch bei anderen? (also keine abgewandelten Versionen von diesem...)
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

(NEU!) Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

ImmoF
Beiträge: 174
Registriert: Do 26. Jun 2003, 18:33
Kontaktdaten:

Re: Kontaktformular mit Umlauten

Beitrag von ImmoF » Do 28. Apr 2011, 12:11

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.

McHubi
Beiträge: 1080
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Kontaktformular mit Umlauten

Beitrag von McHubi » Do 28. Apr 2011, 13:51

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...
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

(NEU!) Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

ImmoF
Beiträge: 174
Registriert: Do 26. Jun 2003, 18:33
Kontaktdaten:

Re: Kontaktformular mit Umlauten

Beitrag von ImmoF » Sa 30. Apr 2011, 09:06

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?

Dodger77
Beiträge: 3625
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Re: Kontaktformular mit Umlauten

Beitrag von Dodger77 » Sa 30. Apr 2011, 09:30

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.

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Kontaktformular mit Umlauten

Beitrag von Spider IT » Sa 30. Apr 2011, 18:16

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é

ImmoF
Beiträge: 174
Registriert: Do 26. Jun 2003, 18:33
Kontaktdaten:

Re: Kontaktformular mit Umlauten

Beitrag von ImmoF » Mo 2. Mai 2011, 09:51

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.

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Kontaktformular mit Umlauten

Beitrag von Spider IT » Mo 2. Mai 2011, 10:14

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é

ImmoF
Beiträge: 174
Registriert: Do 26. Jun 2003, 18:33
Kontaktdaten:

Re: Kontaktformular mit Umlauten

Beitrag von ImmoF » Mo 2. Mai 2011, 10:45

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.

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Kontaktformular mit Umlauten

Beitrag von Spider IT » Mo 2. Mai 2011, 14:46

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é

ImmoF
Beiträge: 174
Registriert: Do 26. Jun 2003, 18:33
Kontaktdaten:

Re: Kontaktformular mit Umlauten

Beitrag von ImmoF » Mo 2. Mai 2011, 15:03

Perfekt. Das wars. Umlaute alle da. Besten Dank!

Oldperl
Beiträge: 4016
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Franken, Bayern
Kontaktdaten:

Re: Kontaktformular mit Umlauten

Beitrag von Oldperl » Mo 2. Mai 2011, 17:14

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
CONTENIDO 4.9 Entwickler-Handbuch - Publikation auf medium.com zu meinem angedachten Entwickler-Buch zu CONTENIDO 4.9
ConLite 2.0, alternatives und stabiles Update von Contenido 4.8.x
phpBO Search Advanced - das neue Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

steve04
Beiträge: 46
Registriert: Fr 5. Nov 2010, 20:26
Kontaktdaten:

Re: (gelöst) Kontaktformular mit Umlauten

Beitrag von steve04 » Di 31. Mär 2015, 18:19

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";

Gesperrt