Datei zwischen 2 Tags einlesen
TomIRL
- php
Moin,
Das Problem:
Ich habe ein Verzeichnis mit bisher mehr als 50 verschiedenen Dateien.
Die haben alle das gleiche Layout.
Ich will jetzt die Seite auf dynamisch umbauen.
Nun will ich aber nicht jede Seite einzeln anfassen.
Kurrzum ich such einen Befehl mit dem ich möglichst ohne Stringfunktionen eine html Datei öffnen kann und einen bestimmten Inhalt der sich zwischen 2 Tags befindet auslesen kann.
Ich habe so etwas schon mal gebaut, finde aber aktuell den Befehl nicht mehr.
Damals habe ich mit fopen irgendwie eine Datei geöffnete und alls was zwischen 2 tags war ausgelsen.
Meiner Ansicht nach habe ich das irgendwie gleich mit angegeben, ich weiß es aber nicht sicher.
Vielleicht jemand einen Tip?
TomIRL
echo $begrüßung;
Kurrzum ich such einen Befehl mit dem ich möglichst ohne Stringfunktionen eine html Datei öffnen kann und einen bestimmten Inhalt der sich zwischen 2 Tags befindet auslesen kann.
Mir ist keine derartige Funktion bekannt. Meinst du vielleicht strip_tags(), fgetss()? Oder irgendwas mit einen regulären Ausdruck? Oder aus PEAR einen HTML-Parser XML_HTMLSax/XML_HTMLSax3?
Ich würde es zunächst mit einen regulären Ausdruck versuchen.
echo "$verabschiedung $name";
Moin,
Im Grunde Suche ich so etwas wie readfile () http://de.php.net/manual/de/function.readfile.php
Nur das ich gleich mit die Tags angeben kann zwischen denen gelesen werden soll.
Im Zweifel helfe ich mir mit substr() oder mit file und irgendwelchen Arrayfunktionen.
Ich bin mir aber fast sicher das ich das vor ca. 2 jahren hinbekommen habe.
Vieloe Grüße TomIRL
Um es noch mal deutlich zu machen:
Ich brauche quasie alles zwischen <body>und </body>
Hat man mal ne weile nix gemacht ist wie ein Brett vor dem Kopf.
Ich suche unter Umständen auch ne Stringfunktion mit der ich das lösen kann.
Vielen Dank TomIRL
echo $begrüßung;
Ich brauche quasie alles zwischen <body>und </body>
Ich suche unter Umständen auch ne Stringfunktion mit der ich das lösen kann.
Na dann, hier zwei Vorschläge:
preg_match('|<body.*?>(.*)</body>|', $file, $matches);
echo htmlspecialchars($matches[1]);
$bodystart = strpos($file, '>', strpos($file, '<body')) + 1;
$bodyend = strpos($file, '</body>') - $bodystart;
echo htmlspecialchars(substr($file, $bodystart, $bodyend));
echo "$verabschiedung $name";
Lieber dedlfix,
preg_match('|<body.?>(.)</body>|', $file, $matches);
echo htmlspecialchars($matches[1]);$bodystart = strpos($file, '>', strpos($file, '<body')) + 1;
$bodyend = strpos($file, '</body>') - $bodystart;
echo htmlspecialchars(substr($file, $bodystart, $bodyend));
warum nicht einfach
~~~php
$meine_html_datei = "pfad/zur/datei.html";
$html_body = preg_replace("|(?is)<body[^>]*>(.*)</body>|", "\\1", implode("", file($meine_html_datei)));
Liebe Grüße aus Ellwangen,
Felix Riesterer.
echo $begrüßung;
warum nicht einfach [... etwas mit preg_replace ...]
Viele Wege führen nach Rom.
Das preg_"replace" kommt mir irgendwie für diese Aufgabe "missbraucht" vor. Ich will ja eigentlich was haben, nichts ersetzen.
Die Modifizierer "is" habe ich unterschlagen, weil ich nicht daran gedacht habe. Ich würde sie aber auch hintendranhängen statt in den Ausdruck hinein.
(Und das implode('', file(...)) kann man seit PHP 4.3 auch durch ein file_get_contents() ersetzen.)
echo "$verabschiedung $name";