Ankündigung

Einklappen
Keine Ankündigung bisher.

Quelltext mehrzeilig auslesen

Einklappen

Neue Werbung 2019

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

  • Quelltext mehrzeilig auslesen

    Ich habe ein Script am laufen welches mir eine gewisse Seite durchsucht und dann ein bestimmtes pdf File(es gibt mehrere auf der Seite) als Link ausgibt

    Nun hat der Seitenbetreiber die Seite umgestellt und der Code der gesucht wird ist nun auf 2 verschiedenen Zeilen:

    Code:
    href="/1.2018.pdf"
    title="Zutaten"
    Nun kann scheinbar das Script nicht mit mehreren Zeilen umgehen:

    PHP-Code:
    <?php
    $datei 
    fopen ("https://www.example.com/produkte/""r");
    if (!
    $datei) {
        echo 
    '<a href="https://www.example.com">Deklaration</a>';
        exit;
    }
    while (!
    feof ($datei)) {
        
    $zeile fgets ($datei1600);
        if (
    preg_match ('@href="(.*)"title="Zutaten"@s'$zeile$treffer)) {
            
    $title $treffer[1];
            break;
        }
    }
    echo 
    $title;
    fclose($datei);
    ?>
    Was muss geändert werden damit der Code auf mehreren untereinander stehenden Zeilen Funktioniert?

  • #2
    Verwende bitte example.com wenn du eine Beispieldomain brauchst. Ändere das bitte.

    Lies die Datei doch erst mal komplett ein, zum Beispiel mit file_get_contents und danach erst suchst du mit pregmatch.,
    Da du ja schon die option s für multiline verwendest versuche es mal hiermit
    PHP-Code:
    preg_match ('@href=")(.|\n)*)title="Zutaten"@u'$zeile$treffer
    Die option u steht für unicode.

    Kommentar


    • #3
      Zitat von protestix Beitrag anzeigen
      Verwende bitte example.com wenn du eine Beispieldomain brauchst. Ändere das bitte.

      Lies die Datei doch erst mal komplett ein, zum Beispiel mit file_get_contents und danach erst suchst du mit pregmatch.,
      Da du ja schon die option s für multiline verwendest versuche es mal hiermit
      PHP-Code:
      preg_match ('@href=")(.|\n)*)title="Zutaten"@u'$zeile$treffer
      Die option u steht für unicode.
      OK habs geändert

      Den Code hab ich nun angepasst leider ohne erfolg

      PHP-Code:
      <?php
      $datei 
      fopen ("https://www.example.com/produkte/""r");
      if (!
      $datei) {
          echo 
      '<a href="example.com">Deklaration</a>';
          exit;
      }
      while (!
      feof ($datei)) {
          
      $zeile fgets ($datei1600);
          if  (
      preg_match ('@href=")(.|\n)*)title="Zutaten"@u'$zeile$treffer))   {
              
      $title $treffer[1];
              break;
          }
      }
      echo 
      $title;
      fclose($datei);
      ?>
      Auch hier wird leider nichts gefunden ab der 2. Zeile

      Kommentar


      • #4
        s = single line
        m = multiline

        Sollte aber einfach so gehen:
        Code:
        href="(.*)"\ntitle="Zutaten"
        sorry, shift-taste kaputt

        Kommentar


        • #5
          Zitat von Meister1900 Beitrag anzeigen
          s = single line
          m = multiline

          Sollte aber einfach so gehen:
          Code:
          href="(.*)"\ntitle="Zutaten"
          Leider auch mit dem Code keine veränderung, wird nichts gefunden sobald es in der 2. Zeile steht

          Kommentar


          • #6
            PHP-Code:
            ...fgets ($datei1600); 
            Du liest auch immer nur 1660 Bytes ein und durchsuchst diese 1600 Bytes, das es vorher keine Probleme gab ist daher reiner Zufall.
            Lade die Datei erst komplett und durchsuche diese dann.

            Kommentar


            • #7
              Zitat von protestix Beitrag anzeigen
              PHP-Code:
              ...fgets ($datei1600); 
              Du liest auch immer nur 1660 Bytes ein und durchsuchst diese 1600 Bytes, das es vorher keine Probleme gab ist daher reiner Zufall.
              Lade die Datei erst komplett und durchsuche diese dann.
              Nur geht es wenn ich \ntitle="Zutaten" rausnehme, Sprich die 2. Zeile, also würde der Text ja sowieso vorher kommen

              Kommentar


              • #8
                Hast du die URL denn trotzdem mal per file_get_contents() geholt?
                Hier geht der reguläre Ausdruck jedenfalls: https://regex101.com/r/oc9szk/1
                sorry, shift-taste kaputt

                Kommentar


                • #9
                  Test mit diversen Möglichkeiten, REGEX macht man nicht alle Tage.
                  Dein Problem war das 2. Dopplete Anführungszeichen.

                  PHP-Code:
                  <?php
                  $zeile 
                  = <<<EOD
                  href="/1.2018.pdf"
                  title="Zutaten"
                  EOD;

                  echo 
                  'Test 1'"<br>\n";
                  if (
                  preg_match ('@href="(.*)"(.*)title="Zutaten"@Us'$zeile$treffer)) {
                      
                  var_dump$treffer[1] );  // string '/1.2018.pdf' (length=11)
                  }

                  echo 
                  'Test 2'"<br>\n";
                  if (
                  preg_match ('@href="(.*)"[\s]*title="Zutaten"@Us'$zeile$treffer)) {
                      
                  var_dump$treffer[1] );  // string '/1.2018.pdf' (length=11)
                  }

                  echo 
                  'Test 3'"<br>\n";
                  if (
                  preg_match ('@href="(.*)"(\s*)title="Zutaten"@U'$zeile$treffer)) {
                      
                  var_dump$treffer[1] );  // string '/1.2018.pdf' (length=11)
                  }

                  echo 
                  'Test 4'"<br>\n";
                  if (
                  preg_match ('@href="(.*)"(.*)title="Zutaten"@Um'$zeile$treffer)) {
                      
                  var_dump$treffer[1] );  // schlägt fehl
                  }
                  ?>

                  Kommentar


                  • #10
                    In einigen Beiträgen hier werden Modifikatoren falsch verwendet. So besteht ein Unterschied zwischen U und u.
                    U : Dieser Modifikator kehrt die Gier von Quantifikatoren um
                    u: Unicode

                    Vermute protestix wollte @u haben.

                    Die Wirkung von s und m mit s = single line und m = multiline zu beschreiben ist zu kurz gegriffen und führt zu Missverständnissen.

                    s bedeutet das der Punkt auch Newlines erfasst, oder anders .* geht auch über mehrere Zeilen.
                    Dafür mal ein Beispiel:
                    PHP-Code:
                    $string 'abc123
                    3456
                    890
                    def'
                    ;

                    $r preg_match('~bc.*d~s',$string,$match);
                    var_dump($match); 
                    // array(1) { [0]=> string(19) "bc123 3456 890 d" } 
                    Lasse ich hier den Modifier s weg, matcht der Ausdruck nicht.

                    Kommentar


                    • #11
                      Zitat von fabian86 Beitrag anzeigen
                      Ich habe ein Script am laufen welches mir eine gewisse Seite durchsucht und dann ein bestimmtes pdf File(es gibt mehrere auf der Seite) als Link ausgibt

                      Nun hat der Seitenbetreiber die Seite umgestellt und der Code der gesucht wird ist nun auf 2 verschiedenen Zeilen:
                      Frag den Seitenbetreiber nach einer API um die Dateinamen in einer definierten Form geliefert zu bekommen (z.B. XML oder JSON) - wenn es die API nicht gibt möchte der Betreiber wohl auch nicht dass das ausgelesen wird.

                      Kommentar


                      • #12
                        Zustimmung zu tk1234. Davon abgesehen eignet sich preg_match() nicht zum Auslesen von HTML-Dokumenten. Für sowas nimmt man einen HTML-Parser wie z.B. DOMDocument und verwendet XPath.

                        Kommentar

                        Lädt...
                        X