Mailtext wird nicht korrekt dargestellt
LiAn
- php
Hallo allerseits,
ich hab einen Wettbewerb programmiert. Mit eigenem CMS für den Kunden, dass der da seine Fragen selbst reinschreiben kann.
Jetzt wird aber der Mailtext, den er und der Teilnehmer erhält nicht ganz richtig dargestellt. Also eigentlich wird alles schön dargestellt ausser dem Apostroph. Alle Umlaute öüä éèà usw werden korrekt dargestellt nur der blöde Apostroph nicht. An stelle von ' wird mir ' gezeigt.
charset der php-seiten ist UTF-8.
ich hab dann so ein include, in dem die Einträge als Variablen aufgerufen werden. diese hole ich so: $frage = utf8_encode($row[feldA]);
versteh einfach nicht ganz, weshalb alles ausser dem Apostroph korrekt dargestellt wird.
Kann mir da jemand helfen, oder braucht ihr mehr Code?
Gruss,
LiAn
versteh einfach nicht ganz, weshalb alles ausser dem Apostroph korrekt dargestellt wird.
Kann mir da jemand helfen, oder braucht ihr mehr Code?
Wendest Du an irgendeiner Stelle im Script htmlspecialchars o.ä. an?
Siechfred
Hallo Siechfred,
Wendest Du an irgendeiner Stelle im Script htmlspecialchars o.ä. an?
Nein eigentlich nicht. Hätte das nicht auch Auswirkungen auf die Umlaute?
Wendest Du an irgendeiner Stelle im Script htmlspecialchars o.ä. an?
Nein eigentlich nicht. Hätte das nicht auch Auswirkungen auf die Umlaute?
Nein, siehe Beschreibung zu htmlspecialchars. Woher kommen denn die Texte, die Du dann in die E-Mail schreibst? Aus einem CMS? Werden dort evtl. Umwandlungen vorgenommen?
Siechfred
Woher kommen denn die Texte, die Du dann in die E-Mail schreibst? Aus einem CMS? Werden dort evtl. Umwandlungen vorgenommen?
Ich hab einen Mailer geschrieben, dort wird ein Mailtext zusammengestellt:
$bestaetigung = "Vielen Dank für Ihre Teilnahme am Wettbewerb. Sie haben folgende Daten übermittelt:\n\n";
$bestaetigung .= "".$frage1_d."\n";
$bestaetigung .= "Antwort : ".$antwort1."\n\n";
$bestaetigung .= "".$frage2_d."\n";
$bestaetigung .= "Antwort : ".$antwort2."\n\n";
$bestaetigung .= "Von: ".$anrede." ".$vorname." ".$name."\n\n";
$bestaetigung .= "Adresse: ".$adresse."\n";
$bestaetigung .= "PLZ/Ort: ".$ort."\n";
$bestaetigung .= "E-Mail: ".$email."\n\n";
if (isset($newsletter)) {$bestaetigung .= $vorname." ".$name." wünscht den Newsletter.\n\n";}
if (isset($aufmerksam)) {$bestaetigung .= $vorname." ".$name." ist durch ".$aufmerksam." auf den Wettbewerb aufmerksam geworden.\n\n";}
$bestaetigung .= "Sollten Sie der Gewinner sein, werden Sie von uns kontaktiert.\n\nViel Glück!";
$bestaetigung = utf8_decode($bestaetigung);
das Problem entsteht bei den Variablen:
$frage1_d und $frage2_d
die werden vorher über ein include eingebettet und darin so definiert:
$feldA = utf8_encode($row["feldA"]);
$frage1_d = $feldA;
die Fragen schreibt der kunde per CMS in eine Datenbank.
die Fragen schreibt der kunde per CMS in eine Datenbank.
Wie sehen die Rohdaten aus, wie sie aus der DB kommen? Ich verwette meinen Kaffee drauf, dass da statt Apostroph ' steht... ;)
Siechfred
Wie sehen die Rohdaten aus, wie sie aus der DB kommen? Ich verwette meinen Kaffee drauf, dass da statt Apostroph ' steht... ;)
Stimmt. Da steht ' anstelle von Apostroph drin. Du meinst, dass das beim in die Datenbank schreiben passiert? Vielen Dank. Jetzt weiss ich auf jeden Fall, wo ich den Fehler suchen musss.
Hab's rausgefunden:
in der Datei, die die Datenbank füllt:
$feldA = str_replace("'", "'", $feldA);
...
und dann habe ich das im Mailer wieder rückgängig gemacht:
$frage1_f = str_replace("'", "'", $frage1_f);
...
Im CMS stand im Kommentar, dass einfache Anführungszeichen bei gewissen Hostings Htmlkodiert werden müssen. Deshalb habe ich's drin gelassen und dann wieder rückgängig gemacht.
Merci Siechfred, ohne dich hätt ich das nicht rausgefunden.
echo $begrüßung;
Im CMS stand im Kommentar, dass einfache Anführungszeichen bei gewissen Hostings Htmlkodiert werden müssen.
Das ist garantiert eine Falschaussage aufgrund von Unwissen. Jegliche Daten müssen, sofern sie in einen anderen Kontext gebracht werden sollen, gemäß den Regeln des Kontextes behandelt werden. Mir ist kein gängiges DBMS bekannt, das im Kontext HTML angesprochen werden will oder muss. Vermutlich hat der Autor eine zum DBMS passende Behandlung der Daten unterlassen und behilft sich mit der '-Behandlung. Du solltest dir das Projekt mal vornehmen und ausmisten. Auch das Hin- und Herkodieren von und nach UTF-8 ist nicht sinnvoll.
echo "$verabschiedung $name";