scripter2000: Wie teil eines Strings auslesen?

Hallo,
Ich habe einen riesigen String mit allem möglichen:

X-Mozilla-Status: 0001
X-Mozilla-Status2: 01000000
FCC: mailbox://nobody@Local%20Folders/Sent
X-Identity-Key: id2
Message-ID: 446DB956.9040102@bitplan.com
Date: Fri, 19 May 2006 14:43:51 +0200
From: Maria beispiel@example.com
X-Mozilla-Draft-Info: internal/draft; vcard=1; receipt=0; uuencode=0
User-Agent: Thunderbird 1.5.0.2 (Windows/20060308)
MIME-Version: 1.0
Subject: Mein Betreff

Nun möchte ich das was hinter "Subject:" steht (also "Mein Betreff") rausfiltern, bzw. in einem extra String haben.

Wie mache ich das am besten?
$subject = sscanf($string, 'Subject: %s'); hat leider nicht funktioniert...

Danke!

  1. Hallo,

    $subject=[link:http://de3.php.net/manual/de/function.substr.php@title=substr]($string,[link:http://de3.php.net/manual/de/function.strpos.php@title=strpos]($string,'Subject: ')+1);  
    $subject=substr($ubject,0,strpos($subject,"\n");
    

    Gruß aus Berlin!
    eddi

    1. Hallo eddi.

      $subject=substr($ubject,0,strpos($subject,"\n");

      Müsste es nicht „\r\n“ sein?

      Einen schönen Sonntag noch.

      Gruß, Ashura

      --
      sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
      „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
      [HTML Design Constraints: Logical Markup]
      1. Hallo,

        Müsste es nicht „\r\n“ sein?

        möglicherweise; aber da keine weiteren Erläuterungen dazu kamen, ist "\n" jedenfalls das Zeilenende, wogegen "\r\n" nicht zwingend enthalten sein muß.

        Gruß aus Berlin!
        eddi

        1. Hallo eddi.

          Müsste es nicht „\r\n“ sein?

          möglicherweise; aber da keine weiteren Erläuterungen dazu kamen, ist "\n" jedenfalls das Zeilenende, wogegen "\r\n" nicht zwingend enthalten sein muß.

          Auch nicht als Terminator für den Subject-Header?

          BTW, dein Code war noch buggy:

          $subject = substr($string, strpos($string, 'Subject: ') + 9); # strlen('Subject: ') == 9  
          $subject = substr($subject, 0, strpos($subject,"\n"));
          

          Einen schönen Sonntag noch.

          Gruß, Ashura

          --
          sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
          „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
          [HTML Design Constraints: Logical Markup]
          1. Hallo,

            Auch nicht als Terminator für den Subject-Header?

            Dort schon, wenn es denn ein Header ist.

            Ich habe einen riesigen String mit allem möglichen:

            Möglicherweise wird dieser String aber von einem sendmail-Ersatzprogramm aufgegabelt, dann ist nicht zwingend "\r\n" enthalten.

            BTW, dein Code war noch buggy:

            Danke!

            Gruß aus Berlin!
            eddi

          2. echo $begrüßung;

            BTW, dein Code war noch buggy:

            $subject = substr($string, strpos($string, 'Subject: ') + 9); # strlen('Subject: ') == 9

            $subject = substr($subject, 0, strpos($subject,"\n"));

              
            Das ist er immer noch, zumindest indirekt. Wenn in dem Text keine Subject-Zeile vorkommt - wovon man bei einigen Spam-Mails ausgehen kann - liefert er Teile der ersten Zeile. Das liegt daran, dass das Ergebnis von strpos() ungeprüft weiterverwendet wird. Bei Nichtenthaltensein des Suchbegriffs liefert strpos() false. Das wird von PHP per eingebauter Typumwandlung in ein 0 umgewandelt, und stellt somit für substr() den Stringanfang dar.  
              
              
            echo "$verabschiedung $name";