Seite 1 von 2
Text aus HTML rausfiltern, mit welcher Funktion? (php)
Verfasst: 02.05.2007 18:40
von Mafia GmbH
Hallo ich suche verzweifelt nach einer Funktion in php das aus einer HTML einen Text ausfiltert.
Das heißt, ich habe HTML in einem String gespeichert.
z.B. html = "<html><b>Dies ist der Text</b><html>";
Ich möchte der Funktion einfach sage, das der Text zwischen <b> und </b> steht und soll diesen Text in einen Anderen String speichern.
Habe schon geggoogelt, aber wen ich Wort Filterung eingebe, dann finde ich genau andersrum, das man den Text da zwischen durch String ersetzen könnte.
Ich danke für die Hilfe

Verfasst: 02.05.2007 19:11
von Miriam
Verfasst: 02.05.2007 19:18
von Mafia GmbH
Diese Funktion entfernt nur die HTML Tags, wie ich dies so verstanden habe.
Aber ich muss unbending die Funktion haben, die zschischen par Tags auslesen kann.
Weil in der HTML kann auch wo anders noch andere Texte Sch befinden die ich nicht so brauche. Und wen ich die HTML Tags lösche, dann würde mir noch schwiriger sein den Text raus zu filtern.
Verfasst: 02.05.2007 19:20
von Miriam
Also Du willst explizit den String zwischen <b> und </b> rausfiltern? Gibt es nur einen solchen Tag?
Verfasst: 02.05.2007 19:25
von Mafia GmbH
Also der String kann so aussehen.
HTML = '<html>Text das nicht benötig ist.<div Style="" id=test>Das was ich will</div>Dieser Text ist auch unnötigt.';
So wen ich den Text "Das was ich will" ausfiltern soll.
Will ich der Funktion folgende Werte angeben, 'id=test>' und '</div>'.
Das heißt das die Funktion einfach nach "id=test>" sucht und holt jedes Zeichen in den String raus bist es auf '</div>' stöst.
Ich nahme extra mehrere Zeihen, damit es eindeutig bleibt, und einmalig im string.
Verfasst: 02.05.2007 19:55
von Miriam
Scheinbar hat keiner von den RegExern 'ne Idee.
Probier' es so:
Code: Alles auswählen
<?PHP
$start = '<div id="test">';
$stop = '</div>';
$text = '<html>Text das nicht benötig ist.<div id="test">Das was ich will</div>Dieser Text ist auch unnötigt.';
$first = strpos($text, $start);
$second = strpos($text, $stop);
$text = substr($text, $first+strlen($start), $second-strlen($text));
print($text);
?>
Verfasst: 03.05.2007 12:46
von S2B
Auf die Schnelle (musst du bestimmt noch anpassen):
Code: Alles auswählen
preg_match_all('#<([^>]+)>(.*?)</\1>#', $text, $matches);
Diese Anweisung sollte alle HTML-Tags und deren Inhalt in das Array $matches schreiben. Allerdings berücksichtigt der Code keine Tags ohne schließenden Tag (<input />, <img /> etc.).
Edit: Schau dir auch mal das hier an: [php:preg_match_all]. Dort wird exakt dieses Beispiel verwendet.
Verfasst: 03.05.2007 14:49
von Miriam
Super, dann vllt so:
Code: Alles auswählen
<?PHP
$start = '<div id="test">';
$stop = '<\/div>';
$text = '<html>Text, der nicht benötig wird.<div id="test">Das ist, was ich will</div> Dieser Text ist auch unnötigt<div id="test">Dieser aber auch.</div>';
preg_match_all("/$start.*?.$stop/i", $text, $ausgabe);
print_r($ausgabe);
?>
Jetzt findet es alles zwischen den gesuchten Tags..
Verfasst: 03.05.2007 18:01
von Mafia GmbH
Danke supper, habt sogar für mich vor gekaut, brauche einfach nur zu schlucken
Naja, aber kleine Verbesserung habe ich doch machen müssen.
So Leuft es:)
preg_match_all("|$start(.*)$stop|", $html, $text);
Aber wen man weiß wie die Funktion heißt, findet man zimlich schnell die passende erklärung
Vielen dank
Verfasst: 04.05.2007 13:25
von S2B
Wenn du das ganze nur einmal finden willst, würde ich [php:preg_match] verwenden.
