ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
582
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
  1. #1
    Registriert seit
    Jul 2007
    Beiträge
    5
    Hi,

    ich verzweifle hier grad an einem Problem und ich hoffe ihr könnte mir helfen.
    Wahrscheinlich ist es so banal, dass ich den Baum vor lauter Wald nicht sehe

    Die Sache ist die:

    Ich lese mir den Quellcode einer Seite aus,
    schneide den Großteil mit stripos und substr weg, bis mir das gecuttete übrigbleibt:

    PHP-Code:
     $src_code htmlspecialchars(file_get_contents($url));

    /* trari trara schnipp schnapp*/

    $src_code_cut substr($src_code$start$laenge); 
    Jetzt will ich mit preg_match_all die Inhalte einer Tabelle auslesen, und da kommt jetzt das Problem.
    Der String $src_code_cut enthält nur noch den html-code mit der Tabelle, also:

    HTML-Code:
    <table> ........ </table>
    genau so steht es auch da, über
    echo $src_code_cut.

    Wenn ich jetzt aber das als Quell-String für den preg_match_all eingebe:

    PHP-Code:
     preg_match_all("|<th[^>]+>(.*)</t[^>]+>|U"$src_code_cut$ausgabePREG_PATTERN_ORDER); 
    Und die Inhalte des Arrays auslesen will, dann kommt nix.

    Mache ich es aber so:

    PHP-Code:
     preg_match_all("|<th[^>]+>(.*)</t[^>]+>|U"'<table> .... </table>'$ausgabePREG_PATTERN_ORDER); 
    dann kommen die Richtigen Ergebnisse.

    Was muss ich jetzt also mit meinem $src_code_cut tun, damit es von preg_match_all gelesen werden kann?


    Danke schonmal
     

  2. #2
    Avatar von einfach nur crack
    einfach nur crack ist offline mag Cookies & Kekse
    Registriert seit
    May 2007
    Ort
    ::1
    Beiträge
    2.423
    Was gibt dir denn var_dump() aus? Ansonsten wäre der Teil zwischen deinem ersten Skriptschnipsel und deinem zweiten interessant.
     
    Wir alle hier helfen gerne in unserer Freizeit weiter und versuchen Probleme gemeinsam zu lösen. Deshalb wäre es nett, wenn man das entsprechend mit einer positiven Bewertung oder einem Danke honoriert.

    Bei folgenden Sachen kann ich Dir übrigens helfen:
    PHP
    JavaScript
    Ruby
    CoffeeScript
    CSS
    – Webtechnologien
    – UNIX-Shell

    ... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.

  3. #3
    Registriert seit
    Jul 2007
    Beiträge
    5
    var_dump($src_code_cut) gibt aus:

    string(laenge) ""
    und dahinter die Tabelle, aber von html interpretiert und nicht als code.


    Was bei mir genau passiert ist das:

    PHP-Code:
    $start htmlspecialchars('<table>');
        
    $end htmlspecialchars('</table>');

    $src_code htmlspecialchars(file_get_contents($url));

    $start_pos stripos($src_code$start);
    $end_pos stripos($src_code$end);

    $src_code_cut substr($src_code$start_posstrlen($src_code)-((strlen($src_code)-$end_pos)+$start_pos));

    preg_match_all("|<th[^>]+>(.*)</t[^>]+>|U"$src_code_cut$ausgabePREG_PATTERN_ORDER);

    echo 
    $ausgabe[0][0] . "<br>";
    echo 
    $ausgabe[0][1] . "<br>";
    echo 
    $ausgabe[0][2] . "<br>";
    echo 
    $ausgabe[0][3] . "<br>";
    echo 
    $ausgabe[0][4] . "<br>";
    echo 
    $ausgabe[0][5] . "<br>"
    Da gibt es jetzt wie gesagt keine Ausgabe für $ausgabe[][].

    Ersetzt man im preg_match_all das $src_code_cut mit dem String
    '<table>.....</table>'
    Dann geht es Problemlos.

    Ich hatte es auch schon mit htmlspecialchars($src_code_cut) probiert, aber dann gibt es auch keine ausgabe und im Vardump ist dann eh alles wirr.
     

  4. #4
    Avatar von Anna Bolika
    Anna Bolika ist offline Mitglied Gold
    Registriert seit
    Jan 2011
    Beiträge
    123
    Dein Problem liegt bei htmpspecialchars() - das verändert die Größer-Als und Kleiner-Als-Zeichen. Damit läuft dein Regex natürlich ins Leere. Also alle wegmachen und zum Schluss über das fertige Ergebnis laufen lassen, falls du htmpspecialchars() wirklich benötigen solltest. Sollen die Daten denn überhaupt in ein Eingabefeld?

    Außerdem hast du ein Problem in deinem Regex:
    PHP-Code:
    preg_match_all("|<th[^>]+>(.*) 
    Das Plus-Zeichen muss ein Stern sein, sonst findest du nur th-Tags, die auch Attribute haben.
     

  5. #5
    Registriert seit
    Jul 2007
    Beiträge
    5
    Wenn ich htmlspecialchars() wegmache, dann gibt es leider auch keine Ergebnisse.
    Dann kann er nichtmal stripos und substr ausführen.

    Ich bekomm hier gleich die Kriese


    Das mit den Atributen ist schon ok so
    aber danke
    Geändert von sowas aber auch o_ (27.04.12 um 23:36 Uhr)
     

  6. #6
    Avatar von chmee
    chmee ist offline mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.781
    Du bist Dir auch sicher, dass Dein Regex richtig ist?

    Und warum machst Du erstmal ein String-Funktionen-Kauderwelsch, wenn Du gleichermaßen Regex in einer Zeile verwenden kannst, uU mit weniger Problemen?

    Ich nehme als Auslesebasis das table/th-Beispiel von selfhtml
    http://de.selfhtml.org/html/tabellen/aufbau.htm

    und lasse lediglich zwei Regex rüberlaufen und bin schon am Ziel.
    PHP-Code:
    # wir suchen nur einen table-Fund. 
    $regex "#<table(.*?)>(.*?)</table>#ims";
    preg_match ($regex$string$outputA);

    # und dann suchen wir mehrere th
    $regex "#<th>(.*?)</th>#ims"
    preg_match_all ($regex$outputA[1], $outputB);

    foreach(
    $outputB[1] as $thFund)
    {
      echo 
    $thFund."<br/>";

    mfg chmee
     
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

Thema nicht erledigt

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 07.02.11, 16:32
  2. Antworten: 5
    Letzter Beitrag: 22.11.10, 17:31
  3. Antworten: 2
    Letzter Beitrag: 04.09.06, 12:07
  4. Antworten: 3
    Letzter Beitrag: 24.09.04, 12:46
  5. Antworten: 12
    Letzter Beitrag: 09.11.03, 22:06