thomas123: html title einer url per php auslesen

hallo,

ich muss mit php (reine ajax lösung auch ok) den title einer belibigen url auslesen. hab allerdings keine ahnung wie ich das clever lösen kann.

mit fopen kann ich mir die seite nehmen, aber wie komm ich geschickt an den titel ran?

gruß thomas

  1. Hallo,

    schonmal daran gedacht mit einer Funktion nach dem title Tag die Datei zu durchsuchen?
    Ist zumindest eine Lösung, wenn es sicher auch elegantere Lösungen gibt. Bin nicht der php Experte, aber damit würde ich es versuchen zu lösen.

    LG
    --
    kEv*
    ----

  2. Hallo,

    Wenn du die Seite als String in einer Variable $html_source hast, dann klappt das mit diesem Regex:

    preg_match('|<title>([^<]*?)</title>|is', $html_source, $title);

    Grüße
    Jeena Paradies

    1. Hallo Jeena.

      Wenn du die Seite als String in einer Variable $html_source hast, dann klappt das mit diesem Regex:

      preg_match('|<title>([^<]*?)</title>|is', $html_source, $title);

      Hm, warum eigentlich gleich mit regulären Ausdrücken losfeuern?
      So kann es auch gehen:

      <?php  
        
      $str_html = '<html><head><title>Foo</title></head><body><p>Bar</p></body>'; // Simples HTML-Dokument  
      $int_start = strpos($str_html, '<title>'); // Position des title-Anfangstags  
      $int_start += 7; // strlen('<title>') == 7  
      $int_end = strpos($str_html, '</', $int_start); // Position des title-Endtags  
        
      echo substr($str_html, $int_start, $int_end - $int_start); // „Foo“  
        
      ?>
      

      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 Gunnar™

        Kleine Korrektur für den Fall, der eigentlich nicht auftreten darf:

        <?php  
          
        $str_html = '<html><head><title>Foo</title></head><body><p>Bar</p></body>'; // Simples HTML-Dokument  
        $int_start = [link:http://de2.php.net/manual/en/function.strpos.php@title=strpos]($str_html, '<title>'); // Position des title-Anfangstags  
          
        if ($int_start !== false) {  
          
          $int_start += 7; // [link:http://de2.php.net/manual/en/function.strlen.php@title=strlen]('<title>') == 7  
          $int_end = strpos($str_html, '</', $int_start); // Position des title-Endtags  
          
          echo [link:http://de2.php.net/manual/en/function.substr.php@title=substr]($str_html, $int_start, $int_end - $int_start); // „Foo“  
          
        }  
          
        ?>
        

        Eigentlich _muss_ immer ein title-Element vorhanden sein. Eigentlich.

        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,

          Kleine Korrektur für den Fall, der eigentlich nicht auftreten darf:
          Eigentlich _muss_ immer ein title-Element vorhanden sein. Eigentlich.

          Aber wenn man wirklich HTML parsen will, dann müsste man sachen wie

            <  
             TITLE LANG=DE-DE DIR=RTL  
            >  
             bar  
            </TITLE>
          

          auch mit herausfischen, oder nicht? Vor allem die Groß und kleinschreibung, das geht dann mit einem Regulären Ausdruck um einiges einfacher, aber man bräuchte eigentlich einen SGML-Parser, doch für PHP kene ich erst mal keinen.

          Grüße
          Jeena Paradies

          1. Hallo Jeena.

            Aber wenn man wirklich HTML parsen will, dann müsste man sachen wie

            <

            TITLE LANG=DE-DE DIR=RTL
              >
               bar
              </TITLE>

            
            >   
            > auch mit herausfischen, oder nicht?  
              
            Wo du recht hast …  
              
            
            > Vor allem die Groß und kleinschreibung, das geht dann mit einem Regulären Ausdruck um einiges einfacher, aber man bräuchte eigentlich einen SGML-Parser, doch für PHP kene ich erst mal keinen.  
              
            Man könnte die Spielchen mit den Stringfunktionen durchaus noch weiter treiben, aber dann ist fraglich, ob sie überhaupt noch einen Performancevorteil gegenüber einem regulären Ausdruck bieten.  
              
              
            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](http://www.w3.org/History/19921103-hypertext/hypertext/WWW/MarkUp/HTMLConstraints.html)]
            
            1. Hallo Gunnar™

              Man könnte die Spielchen mit den Stringfunktionen durchaus noch weiter treiben, […]

              Und es spricht auch eigentlich nichts dagegen, da das title-Element über kein Attribut verfügt, welches das Zeichen „>“ enthalten könnte:

              <?php  
                
              $str_html = '<html><head><title>Foo</title></head><body><p>Bar</p></body>'; // Simples HTML-Dokument  
              $int_start = stripos($str_html, '<title'); // Position des Anfangstags  
                
              if ($int_start !== false) {  
                
                $int_start = strpos($str_html, '>', $int_start); // Terminator des Anfangstags  
                $int_start += 1; // strlen('>') == 1  
                $int_end = strpos($str_html, '</', $int_start); // Position des title-Endtags  
                
                echo substr($str_html, $int_start, $int_end - $int_start); // „Foo“  
                
              }  
                
              ?>
              

              Dank stripos ist nun auch egal, ob Groß- oder Kleinschreibung.

              Ich habe meine Zweifel daran, dass eine Trennung von Anfangszeichen und Name des Elementes erlaubt ist. Zumindest kann ich in der HTML-Spezifikation dazu nichts finden.

              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 Ashura,

                Ich habe meine Zweifel daran, dass eine Trennung von Anfangszeichen und Name des Elementes erlaubt ist. Zumindest kann ich in der HTML-Spezifikation dazu nichts finden.

                Das heißt ja nichts. Hast du dir auch die SGML-Spezifikation angesehen? ;-)

                Schöne Grüße,

                Johannes

                --
                WM-Tippspiel: http://zeller-johannes.de/wmtipp/
                ie:% fl:( br:< va:| ls:[ fo:) rl:) n4:? ss:| de:] js:| ch:} sh:) mo:| zu:)
                1. Hallo Johannes.

                  Hast du dir auch die SGML-Spezifikation angesehen? ;-)

                  Ja, habe ich, aber verstanden: nein. Wenn sie mir jemand übersetzen könnte …

                  Einen schönen Montag 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 Gunnar™

                    Hast du dir auch die SGML-Spezifikation angesehen? ;-)

                    Laut dem, was ich ich dieser Übersicht entnehmen kann, sind Whitespaces in SGML nach dem Elementnamen erlaubt, jedoch nicht vorher.

                    Einen schönen Montag 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]