[PHP] file() > HTML einlesen und IDs rausfiltern
yildi
- php
moin moin!
ich hab eine frage,
also ich lese folgendermaßen eine seite ein:
Code:
$lines = file("http://www.url.tld");
der nun eingelesene html code enthält viele urls, wie zb http://www.url.tld?ID=21554
weiss jemand, wie ich diese IDs nun quasi rausfiltern kann. zum beispiel all diese in ein array pushen..
wäre spitze
danke
yildi
Hallo,
untersuche jede Zeile auf das Vorhandensein der Zeichenketten "href=" und "src=". Die Zeichenkette, die mittelbar danach kommt, ist ein Verweise, der entweder von den Zeichen '"' oder "'" oder auch gar nicht eingeschlossen sein kann. Untersuche also nun jeden "Verweis" auf die Existens der Zeichenkette "?ID=".
Wenn Du bei der Umsetzung Probleme hast, kannst Du mit dem Quellcode gerne wieder nachfragen.
Gruß aus Berlin!
eddi
hi!
hab bis jetzt sowas:
foreach($lines as $line_num => $line)
{
$ids[] = preg_replace('%www.url.de?ID=([0-9])%', '\1', $line);
}
und dann print_r($ids);
allerdings is da noch so viel html mit drin..
irgendwie muss da noch was verändert werden..
kannst du nochmal helfen ?:)
danke, yildi
Hi yildi,
$ids[] = preg_replace('%www.url.de?ID=([0-9])%', '\1', $line);
preg_replace() halte ich hier für einen falschen Ansatz - du willst ja eigentlich nichts ersetzen (dein Gedanke war durch das Ersetzen alles HTML wegzubekommen, aber das ist von-hinterum-durch-die-Brust-ins-Auge ;-).
Versuche stattdessen mit preg_match_all() alle Links/URLs einzulesen - könnte z.B. so aussehen:
$anz_urls = preg_match_all('%(href|src)="([^"]+)"%', $text, $treffer);
Zum Einlesen des Textes würde ich dann nicht file() empfehlen, sondern file_get_contents(), was den kompletten Text in eine Variable liest und das nicht in ein Array aufsplittet.
Schau dir dann einfach mal mit print_r($treffer) an, wie die Struktur des $treffer-Arrays aussieht (mag etwas gewöhnungsbedürftig sein) - du kannst das Unterarray von $treffer was die URLs enthält (ich glaube es müsste $treffer[2] sein) dann mit foreach durchgehen.
MfG, Dennis.