technisch korrekt zitieren - kammquoting vermeiden

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • technisch korrekt zitieren - kammquoting vermeiden

    hi,

    hab mir vor kurzem einen kleinen webmailer geschrieben. jetzt suche ich nach einer möglichkeit kammquoting bei antwort-emails zu vermeiden, d.h. der text der originalen nachricht soll beim antworten in das textarea korrekt zitiert übernommen werden. einfach ein zitat-zeichen vor jede zeile zu stellen funktioniert nur bis zu einer bestimmten antworttiefe, danach gibt es kammquotings, welche ich gerne vermeiden möchte.

    person A schreib z.b.

    hallo welt

    person B antwortet auf die nachricht von person A. in seinem eingabefeld steht dann folgendes:

    > hallo welt
    noch ein text

    wenn person A wieder antwortet folgendes:

    >> hallo welt
    > noch ein text
    und noch einer

    und immer so weiter. jede zeile soll nur bis 78 zeichen gefüllt werden. wenn sie im laufe des briefwechsels aufgrund der eingefügen zeichen zu lang wird, soll umgebrochen und danach wieder entsprechend mit zitatzeichen versehen werden. ganz normales zitieren, wie es jeder gängige email-client beherrscht.

    gibt es hierfür bereits fertige funktionen oder klassen, die man sich anschauen könnte?

    danke.

  • #2
    Re: technisch korrekt zitieren - kammquoting vermeiden

    Original geschrieben von php_rookie
    ganz normales zitieren, wie es jeder gängige email-client beherrscht.
    Wenn dem mal so wäre. Manche Clients kommen mit den Quoting Characters anderer Clients nicht klar. Allen voran Outlook.

    Nun zu deiner Frage: Mit Kammquoting meinst du den Wechsel aus kurzen und langen Zeilen, richtig?
    Da wird aus (1)
    > 76 Zeichen lange Zeile .... mit Ende
    > und nächster Zeile

    eben (2)
    >> 76 Zeichen lange Zeile .... mit
    >> Ende
    >> und nächster Zeile

    statt der viel lesbareren Variante (3)
    >> 76 Zeichen lange Zeile .... mit
    >> Ende und nächster Zeile

    Aber warum ist das so? Ganz einfach: Outlook weiß nicht, ob der Zeilenumbruch in (1) durch früheres Quoting eingefügt wurde oder vom Benutzer. Der könnte an dieser Stelle einen Absatz gemacht haben. Den einfach weg zu quoten würde die Struktur des Textes verändern.
    Nicht mal der "First Level Quoter" kann sicher sein, dass alle Umbrüche vom Autor stammen. Manche Clients wenden die maximale Zeilenlänge auch auf ausgehende Mails an (zugegeben, die sind selten geworden) und Mailserver sind per SMTP-Protokoll dazu angehalten, nach ca. 1000 Zeichen einen Umbruch einzufügen (aus historischen Gründen). Dennoch könnte er Kammquoting vermeiden, denn auch der Leser weiß das nicht.
    Aber imho macht zumindest Outlook nichts dergleichen.

    Fazit: Nur in geschlossenen Systemen wie z.B. private Messaging auf einer Webseite kann man Kammquoting vermeiden.
    Zuletzt geändert von onemorenerd; 26.03.2007, 09:21.

    Kommentar


    • #3
      >> 76 Zeichen lange Zeile .... mit
      >> Ende
      >> und nächster Zeile
      sowas wäre schon mal durchaus in ordnung. was ich nicht will ist sowas hier:
      >> 76 Zeichen lange Zeile .... mit
      Ende
      >> und nächster Zeile
      also outlook express style...

      Kommentar


      • #4
        Na das ist doch kein Problem.
        PHP-Code:
        function quote($mailbody$maxlength 76$quotechar '> ') {
            
        $lines explode("\r\n"$mailbody);
            foreach (
        $lines as $i => $line) {
                
        $line $quotechar.$line;
                
        // Zeile zu lang
                
        if (strlen(trim($line)) > $maxlength) {
                    
        // gute Stelle für Umbruch suchen, muß vor $maxlength liegen
                    
        $breakpos min(max((int) strrpos($line' '), 
                                                (int) 
        strrpos($line"\t")), $maxlength);
                    
        // Zeile in zwei Zeilen aufteilen
                    
        $line1 substr($line0$beakpos)."\r\n";
                    
        $line2 substr($line$breakpos);
                    
        // Quotelevel der 1. Zeile ermitteln
                    
        $quotelevel strlen($quotechar);
                    while (
        substr($line1$quotelevelstrlen($quotechar)) == $quotechar) {
                        
        $quotelevel += strlen($quotechar);
                    }
                    
        // und auf 2. Zeile übertragen
                    
        $line2 str_repeat($quotechar$quotelevel strlen($quotechar)).$line2;
                    
        $line $line1.$line2;
                }
                
        $lines[$i] = $line;
            }
            return 
        implode(''$lines);

        Das ist nur so aus der Hand geschrieben. Du solltest auf jeden Fall noch berücksichtigen, dass $line2 nach dem Vorsetzen der Quotezeichen wiederum länger als $maxlength sein könnte.
        Außerdem macht es Sinn, einen maximalen Quotelevel zu definieren.
        Wenn du ganz genau sein willst, solltest du bei der Ermittlung des Quotelevels von $line1 berücksichtigen, dass der Autor diese Zeile zufällig mit $quotechar begonnen haben könnte. Das kann man allerdings nicht erkennen und müßte daher den Algorithmus ganz anders aufziehen.

        Kommentar

        Lädt...
        X