Umlaute werden falsch dargestellt

  • Man hängt sich nicht an anderer Fragen ran, weshalb ich hier das Thema nochmal aufgreife.
    Unter Frage-zu-einem-Kontaktformular habe ich selber das geschrieben...

    Zitat von Gastl

    In PHP auch UTF-8.

    PHP
    header ( 'Content-Type: text/html; Charset=utf-8' );

    Wie witzig find ich das denn? Selber habe ich den Tipp geschrieben, bekomme aber soeben von meinem Uploadscript selber keine Umlaute gesendet. Da ist ein Input-Textfeld, welches diesen Text angenommen und per PHP-Mailer versendet hat.

    Für "Steuererklärung für 2016" verschickt das PHP-Script "Steuererklärung für". Die Uploaddatei besteht aus einem Gemisch von HTML und PHP. In den HTML-Teil habe ich UTF-8 mit "<meta charset="utf-8" />" und im PHP-Teil mit "<?php header ('Content-Type: text/html; charset=utf-8');" deklariert. Die Datei ist auch mit dem Notepad++ auf UTF-8 ohne BOM kodiert und abgespeichert.

    Wie kommt es zu dieser falschen Anzeige? Muss noch irgendwas im PHP-Mailer eingestellt werden, was ich evtl. übersehen habe?

    Vielen Dank schon mal

    Gegen Mods kommt man nicht an, die haben immer Recht. Sind scheinbar nicht kritikfähig.

  • Das mit dem form-tag hatte ich vergessen zu erwähnen. Habe ich auch drin. Ich bin ja nach deinem Tut vorgegangen, bekomme dennoch diese Zeichen. Nochmal zusammen gefasst habe ich drin:

    Zitat

    <meta charset="utf-8" />
    header ('Content-Type: text/html; charset=utf-8');
    <form name="form" action="upload.phtml" enctype="multipart/form-data" method="post" accept-charset="utf-8">

    Den Datenbankteil brauche ich nicht, da ich keine Datenbank benutze. Ich werde mal Probe halber beide meta-Tags für HTML 4 und 5 einbauen.

    Eine Erklärung dafür?

    - - - Aktualisiert - - -

    Habs jetzt nochmal getestet und im Kommentarfeld "Umlauttest äöü ÄÖÜ ß" eingegeben. Ankommen tut aber "Umlauttest äöü ÄÖÜ ß".

    Nochmal ich habe das jetzt alles drin:

    Zitat


    <meta charset="utf-8">
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    header ('Content-Type: text/html; charset=utf-8');
    <form name="form" action="upload.phtml" enctype="multipart/form-data" method="post" accept-charset="utf-8">

    Gegen Mods kommt man nicht an, die haben immer Recht. Sind scheinbar nicht kritikfähig.

    • Offizieller Beitrag

    Ok, und die Dateien sind auch alle korrekt gespeichert?
    Selbst die PHP-Datei, die den Mail-Versand einleitet bzw. die Mail-Daten vorbereitet muss in UTF8 ohne BOM gespeichert sein.
    Manchmal ist der FTP-Client, mit dem man die Dateien auf dem Server schiebt nicht auf UTF8 gesetzt, dann wäre in dem Fall die komplette PHPMailer-Klasse nicht UTF8 gespeichert.

    Der PHPMailer selbst kann mit UTF8 auch noch forciert werden:

    PHP
    $oMailer = new PHPMailer();
    $oMailer->CharSet = 'UTF-8';

    Ich weiß gar nicht, ob das in meinem PHPMailer-Tutorial drin ist, könnte ich sonst mal nachtragen.
    Wichtig ist, dass die Charset-Angabe direkt nach der Instanziierung, da ansonsten bereits Mail-Header geschrieben sein könnten.

    Gruß Arne


    EDIT: Habe mal testweise folgendes Formular erstellt:

    Also im Prinzip, was Du auch hast. Nur wird bei mir alles korrekt angezeigt.
    D.h., es muss an der Speicherung der Dateien liegen.

  • Zitat von Arne Drews

    Ok, und die Dateien sind auch alle korrekt gespeichert?
    Selbst die PHP-Datei, die den Mail-Versand einleitet bzw. die Mail-Daten vorbereitet muss in UTF8 ohne BOM gespeichert sein.


    Ist bei beiden Anforderungen bei mir nur eine Datei mit Namen upload.phtml (steht im form-Tag drin). Und ja, ich schrieb ja schon, ich habe diese Datei mit Notepad++ in UTF-8 ohne BOM abgespeichert. Der Punkt ist schon mal tutti.

    Zitat von Arne Drews

    Manchmal ist der FTP-Client, mit dem man die Dateien auf dem Server schiebt nicht auf UTF8 gesetzt, dann wäre in dem Fall die komplette PHPMailer-Klasse nicht UTF8 gespeichert.


    FTP-Client ist Filezilla. Ich habe dort nirgends eine Einstellung zu UTF gefunden. Übertragung des Dateityps steht auf automatisch. Ich gehe dann davon aus, das Filezilla das UTF-8 ohne BOM überträgt.

    Zitat von Arne Drews

    Der PHPMailer selbst kann mit UTF8 auch noch forciert werden:

    PHP
    $oMailer = new PHPMailer();
    $oMailer->CharSet = 'UTF-8';

    Ich weiß gar nicht, ob das in meinem PHPMailer-Tutorial drin ist, könnte ich sonst mal nachtragen.
    Wichtig ist, dass die Charset-Angabe direkt nach der Instanziierung, da ansonsten bereits Mail-Header geschrieben sein könnten.

    Genau das war es. Und genau danach hatte ich auch in#1 gefragt, ob dem PHP-Mailer das auch noch gesagt werden muss. In dem Tutorial, was ich habe steht dazu nichts. Wenn man es aber z.B. so verfasst und sonst auch alles zu UTF-8 beachtet, sollte es klappen. Mein Mailkopf zu PHP-Mailer sieht jetzt so aus und es klappt jetzt:

    PHP
    include_once '../../phpmailer/PHPMailerAutoload.php'; //<- kann natürlich abweichen
    $oMailer = new PHPMailer; 
    $oMailer->CharSet = 'UTF-8';
    // SMTP aktivieren
    $oMailer->isSMTP();
    // SMTP-Server
    $oMailer->Host = 'usw.undsofort.com';

    Vielen Dank
    Wieder dazu gelernt...

    Gegen Mods kommt man nicht an, die haben immer Recht. Sind scheinbar nicht kritikfähig.