PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : HTML parsen


beginner21
16.06.2004, 03:29:28
Hier eine neue knifflige Frage:

Ich habe eine URL die ich mit Hilfe von include "http:..../fcgi-bin/datei.fcgi?parameter usw in meine php-datei rein lade (die URL ist extern)
Daraufhin liefert mir der Befehl ein komplettes html-formular mit allem drum und drann.
Nun ist mein Problem dass ich nur einen Teil dieser Datei brauche.
Sobald ich aber include "http eingebe, liefert mir das include-befehl alles .

Hat jemand eine Idee wie dies zu lösen ist dass ich zwar include aber ohne es gleich darstelle ?

LG

bazubi
16.06.2004, 09:22:46
Wenn Du vor dem include einen buffer mit ob_start() startest kannst Du die Inhalte der includeten Seite cachen. Den Buffer kannst Du dann bearbeiten und nur die Teile ausgeben die Du brauchst.

feuervogel
16.06.2004, 10:22:19
geht das nicht auch mit fread? dann halt wenns notwendig ist mit regulären ausdrücken da was rausfuddeln...

sinfo
17.06.2004, 16:49:57
fp = fopen("meineSeite.html","r");

Die HTML-Seite mit fget auslesen und in die Variable $text schreiben.
dann ...

fclose($fp);

$text = explode("Zeichen VOR Deinem HTML-Code" $text);
$text = explode("Zeichen NACH Deinem HTML-Code" $text[1]);
$text = $text[0];

beginner21
18.06.2004, 01:06:55
Hallo

Vielen Dank für die Antworten.

fread geht leider nicht da es sich um eine cgi-datei handelt. Es gibt keine Werte zurück bei fopen außer massig fehlermeldungen.

ob_start würde mich sehr interessieren. Kannst du bitte ein ganz kleines beispiel schreiben ?

Besten Dank und Gruß

Beginner

feuervogel
18.06.2004, 09:28:45
Output Buffering even works in nested scopes or might be applied in recursive structures... thought this might save someone a little time guessing and testing :)

<pre><?php

ob_start(); // start output buffer 1
echo "a"; // fill ob1

ob_start(); // start output buffer 2
echo "b"; // fill ob2
$s1 = ob_get_contents(); // read ob2 ("b")
ob_end_flush(); // flush ob2 to ob1

echo "c"; // continue filling ob1
$s2 = ob_get_contents(); // read ob1 ("a" . "b" . "c")
ob_end_flush(); // flush ob1 to browser

// echoes "b" followed by "abc", as supposed to:
echo "<HR>$s1<HR>$s2<HR>";

?></pre>

... at least works on Apache 1.3.28

Nandor =)

quelle (http://www.php.net/ob_start)

beginner21
18.06.2004, 13:35:30
vielen dank für den code !

Jedoch leider erfolglos :-(

Das Problem bleibt bestehen. sobald ich

include 'http://www.dXXXX:8080/fcgi-bin/xxxfcgi?parameter
aufrufe, wird die gesamte html-tabelle rausgedrückt.

ich brauche einen weg um diese ausgabe noch abzufangen. wenn ich es mal als variable habe, ist das rausfiltern einzelner zeilen nicht so schwer... aber wie mach ich den text unsichtbar ohne das style der quelle beeinflussen zu können ?

bazubi
18.06.2004, 13:43:36
ob_start();
include 'http://...';
$inhalte = ob_get_clean();

beginner21
18.06.2004, 16:09:47
hi nochmal.

ich hab hier nun etwas zusammengebastelt was funktioniert (dank euch ;-) )


if(!$HTML_INHALT) {
echo "";
} else {
$Before = true;
while(! feof($HTML_INHALT)) {

$line = @ltrim(Chop(fgets($HTML_INHALT, 2048)));
if (strstr($line, '<p title="Name" class="Name">') || !$Before) {
$Before = false;
$line = str_replace('<p title="Name" class="Name">', "", $line);
$tracks_num1 = $line;

}
if (!$Before || strstr($line, "Testtitle")) {
break;
}
}
}


Nun ist mein problem dass es mehrere Felder gibt die gleich heißen und ich brauche alle untereinander. Hab es mit for versucht - komme aber auf keinen grünen zweig.

Kann mir da bitte jemand helfen ?
Das einzige was ich sicher weiß sind die namen die es gesamt gibt. (also eine zahl die auf der seite dargestellt wird)


Bitte Hilfe !


Edited -->


Hier der teil der html:


<li value="1" class="odd">
<p feld="Nr." class="feld">ABC123 /dieser teil verändert sich immer
<p title="Titel" class="title">Ein Titel // Der hier ist gleich
<p title="Name" class="Name"> XXXXX //// Diesen Teil brauche ich !
<li value="1" class="odd">
<p feld="Nr." class="feld">AB
<p title="Titel" class="title">Ein Titel
<p title="Name" class="Name"> XXXXX //// Diesen Teil brauche ich !

tapferesschneid
22.06.2004, 14:16:54
<?php
$html = file_get_contents($url);
$needle = '#<li[^>]*>s*(<p[^>]*>[^<]*){2}<p[^>]*>([^<]+)#is';
preg_match_all($needle, $html, $ziel_array);

foreach ($ziel_array[2] AS $val)
echo $val.'<br>';
?>