Anzeige:
Ergebnis 1 bis 9 von 9

Thema: Einmal mehr: PHP und Sonderzeichen

  1. #1
    Registrierter Benutzer Avatar von smofi
    Registriert seit
    29.12.2004
    Beiträge
    42

    Einmal mehr: PHP und Sonderzeichen

    Hallo Leute,

    nachdem ich viel über HTML-Entitäten, Codierungseinstellungen usw. recherchiert habe, bleibt mir eine Frage offen.

    Ich sende mit PHP ein Mail, und im Text sind Sonderzeichen:
    $brief = " ... Sie k ö nnen ... " ;
    mail (... $brief ... );
    Im Postfach kommt an:
    " ... Sie können ... "
    Mein Problem ist, dass der String in $brief einfach nur ein Literal ist. Soweit ich verstanden habe, kann nur der echo-Befehl mit HTML-Entitäten sinnvoll umgehen. Aber solange ich nur ein Literal habe, helfen mir die HTML-Entitäten und Codierungshinweise nicht weiter. Wenn ich schreibe:
    $brief = " ... Sie k &#246&#59; nnen ... " ;
    mail (... $brief ... );
    dann kommt auch "... Sie k &#246&#59; nnen ..." im Postfach an. Es hilft auch nichts, die Codierung des Editors zu verändern.

    Momentan löse ich das Problem so:
    $brief = " ... Sie k" . chr(246) . "nnen ..." ;
    Da das ziemlich hässlich ist, bin ich dankbar für einen Tipp: Kann man das eleganter lösen?

    Danke für jeden Hinweis

  2. #2
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Mail versand wird über 7 beziehungsweise 8Bit versendet. Daher kannst du schon mal keinen Zeichensatz verwenden der darüber liegt.
    Siehe google us-ascii und Content-Transfer-Encoding
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  3. #3
    Registrierter Benutzer Avatar von CoolPolo
    Registriert seit
    17.02.2006
    Ort
    Adliswil
    Beiträge
    9
    Ich würde das E-Mail als HTML-E-Mail versenden. Das würde dan so aussehen:

    PHP-Code:
    $brief "<html><body>";
    $brief .= "... Sie k &ouml; nnen ...";
    $brief .= "</body></html>";

    $header "Content-Type: text/html";

    mail(... $brief$header); 
    Ich hoffe ich konnte Dir bei Deinem Problem helfen.

    MFG CoolPolo
    Man muss nicht alles wissen, man muss nur wissen wo man es Nachschlagen kann! :cool:

  4. #4
    Registrierter Benutzer
    Registriert seit
    15.10.2005
    Ort
    Franken
    Beiträge
    362
    Oder als RTF (ich mag keine HTML-Mails). Dann kannst du das Sonderzeichen auch escapen (nicht verzagen, google fragen).
    Komischerweise habe noch keine Probleme beim Mail-Versenden gehabt.
    Dank der Rekursion kann ich IF-Schleifen bauen.

    In neuem Glanz: www.turbohummel.de

  5. #5
    Registrierter Benutzer Avatar von smofi
    Registriert seit
    29.12.2004
    Beiträge
    42
    Vielen Dank für Eure Antworten

    Bei HTML- und RTF-Mails bringen viele Mailprogramme eine Spamwarnung und stellen zunächst nur den Code dar. Das möchte ich wenn möglich vermeiden.

    Irgendwie raffe ich noch nicht, wer in der Kette Editor - PHP-Interpreter - Mailserver - Mailprogramm warum welche Codierung hinzufügt oder wegnimmt und wie ich das steuern kann. Aber das muss ich mir selber mal zusammenstellen; der Hinweis auf Content-Transfer-Encoding ist ein guter Einstieg.

    Nochmals danke und weiterhin viel Spass in der Informatik...

  6. #6
    Registrierter Benutzer
    Registriert seit
    29.12.2001
    Ort
    Berlin
    Beiträge
    231
    Content-Transfer-Encoding ist genau richtig
    Das Ganze ist relativ einfach. Du kannst dir ja deinen Mail-Header selber zusammen stellen --> http://de3.php.net/manual/de/function.mail.php
    Um die Parameter rauszubekommen, mache ich das so.
    Ich schicke mir selber ueber ein "normales" Mailprogramm eine solche Mail zu und schau mir dann den Quellcode an.
    Dabei kommt dann das z.B. raus:
    PHP-Code:
       ///////////////////////////////////
        
    $headers="From: ".$from." < ".$email." >\n";
        
    $headers.="Reply-to: ".$from." <".$email.">\n";
        
    $headers.="Reply-path: ".$from." <".$email.">\n";
        
    $headers.="MIME-Version: 1.0\n";
        
    $headers.="Content-Type: text/plain;\n\t charset=\"utf-8\"\n";
        
    $headers.="Content-Transfer-Encoding: 8bit\n";
        
    $headers.="X-Sender: webserver@meine.domain.de\n";
        
    $headers.="X-Mailer: PHP\n";
        
    $headers.="X-Priority: 3\n"
    tomes
    ************************************************
    Man(n oder Frau) muss nicht alles wissen,
    Man(n oder Frau) muss nur wissen wo es steht !
    ************************************************
    http://www.sandtom.net
    ICQ 176436259

  7. #7
    Registrierter Benutzer Avatar von smofi
    Registriert seit
    29.12.2004
    Beiträge
    42

    Lösung: Codierung Mail und Codierung Editor

    @Tomes: Danke für Deinen Code! Das ist genau das Puzzlestück, das mir fehlte Da wir geografisch zu weit auseinander wohnen, kann ich Dir kein Bierchen spendieren.

    Ich hab noch ein wenig herumprobiert. Sonderzeichen entstehen offensichtlich, wenn die Codierung des editierten PHP-Files und die Codierungsangabe im Mailheader sich unterscheiden.

    Beide können UTF-8 sein oder beide können ISO-8859-1 sein, in jedem Fall kommen lesbare Zeichen an (...jedenfalls bezgl. unserer deutschen Umlaute).

    Zusammenfassung @ alle, die das Problem auch haben: Hier überall zählen Codierungen.
    • Editor:
      • Codierung Eingabemethode
      • Codierung der Datei, wie sie effektiv gespeichert wird (bspw. beim XEmacs mit C-x C-m f einstellbar)
    • Mailtransport:
      • Der Mailserver tut wahrscheinlich nichts mit der Codierung selbst. Der transportiert Dateien und erweitert den Header. Spamassassins untersuchen die Dateien und erweitern ebenfalls den Header. Aufgrund des 7/8-Bit-Transportes dürften 16-Bit-Codierungen neue Probleme aufwerfen (-->undefined)
      • Codierung zum Mailen im Header mitgeben für den Mailclient!
    • Mailclient:
      • Codierung des Mailclients zur Darstellung: normalerweise gibt es bei der Einstellung einen Punkt "Auto". Das Mailprogramm liest bei "Auto" die Codierung aus dem Mailheader. Wenn man die Codierungen von Hand umstellt, sieht man, wie die lesbaren Zeichen kommen und gehen.
      • Codierungsangabe im Header

  8. #8
    Registrierter Benutzer
    Registriert seit
    29.12.2001
    Ort
    Berlin
    Beiträge
    231
    Schoen das ich helfen konnte.
    Uebrigens:
    7/8-Bit-Transportes dürften 16-Bit-Codierungen neue Probleme aufwerfen (-->undefined)
    Die Zauberformel heisst hier:
    Content-Transfer-Encoding: base64

    Den Header richtig umzuschreiben ist immer spannend, aber dafuer gibt es auch mehrere Loesungen.
    Wie gesagt, am besten sich ersteinmal aus den Thunderbird heraus eine Mail zuschicken. Dann sieht man wie der prof. Mailclient den Header schreibt.

    tomes
    ************************************************
    Man(n oder Frau) muss nicht alles wissen,
    Man(n oder Frau) muss nur wissen wo es steht !
    ************************************************
    http://www.sandtom.net
    ICQ 176436259

  9. #9
    Registrierter Benutzer
    Registriert seit
    20.07.2003
    Beiträge
    147
    Ich hab dazu mal ein Tutorial geschrieben:

    http://sagmueller.net/php-tut/mails.html

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •