Seite 1 von 1
php: Links extrahieren und umschreiben
Verfasst: 21.12.2004, 13:08
von Fox Mulder
Hallo,
ich möchte mit PHP in einem HTML Dokument alle Links finden und umschreiben.
Link Struktur im HTML Dokument:
<a href="dateiname?a=1&b=2&c=3">Linktext</a>
Nach dem Umschreiben solle die Links so o.ä. aussehen:
<a href="a1-b2-c3-Linktext.html">Linktext</a>
Die Anzahl der Parameter ist variabel.
Ich habe mit preg_match und Reg Expressions probiert die Links im HTML Dokument zu finden,
komme da aber nicht recht weiter.
Kennt jemand eine gute Ressource mit Beispielen in dieser Art?
Gruss
Verfasst:
von
Hochwertiger Linkaufbau bei ABAKUS:
- Google-konformer Linkaufbau
- nachhaltiges Ranking
- Linkbuilding Angebote zu fairen Preisen
- internationale Backlinks
Wir bieten
Beratung und
Umsetzung.
Jetzt anfragen:
0511 / 300325-0
php: Links extrahieren und umschreiben
Verfasst: 02.02.2005, 23:49
von bull
*bump
Brauche gerade ebenfalls einen Linktextextraktor und scheitere.
php: Links extrahieren und umschreiben
Verfasst: 03.02.2005, 07:38
von derHund
hmm,
hier
https://pcre.nophia.de/evaluate/index.php findest du ein tool, daß dir eventuell ein wenig hilft, auch wenn es atm nicht viel mehr macht, als dir das debuggen abzunehmen. falls du dich mit regexp auskennst.
hier
https://regexp-evaluator.de/tutorial.html findest du ein tutorial zum thema regexp, wenn du noch ein wenig wartest, hat der autor es geschafft, zu dem thema link-extraktion ein wenig zu schreiben.
im großen und ganzen brauchst du nur preg_match_all und den modifier U ... und den richtigen regexp
allgemein:
ach, hier:
https://pcre.nophia.de/evaluate/627b861 ... php#output
für weitere angaben, wie title etc. einfach analog vorgehen.
Verfasst:
von
Content Erstellung von
ABAKUS Internet Marketing
Ihre Vorteile:
- einzigartige Texte
- suchmaschinenoptimierte Inhalte
- eine sinnvolle Content-Strategie
- Beratung und Umsetzung
Jetzt anfragen:
0511 / 300325-0
Verfasst: 03.02.2005, 08:09
von Fox Mulder
Ich hatte das hier gefunden, evtl. hilft es Dir weiter:
Quelle:
https://www.php-faq.de/q/q-regexp-links-finden.html
Wie finde ich alle Links in einer HTML-Datei
$zeile sei der Inhalt einer zuvor eingelesenen HTML-Datei. Diese Variable muss innerhalb der While-Schleife neu zusammengebaut werden, sonst läuft man hier in eine Endlosschleife.
$pattern = '=^(.*)<a(.*)href\="?(\S+)"([^>]*)>(.*)</a>(.*)$=msi';
while (preg_match($pattern, $zeile, $txt))
{
/* $txt[3] enthält die gewünschte URL. */
echo $txt[3]."\n";
/* $zeile neu bauen */
$zeile = $txt[1]." hier war mal ein Link ".$txt[6];
}
/* $zeile zur Kontrolle ausgeben */
print "<br>".nl2br($zeile);
$txt enthält als Array alle Tokens, die in der Regexp in Klammern angegeben sind. $txt[0]als Sonderstellung enthält den ganzen Text.
Gruss
php: Links extrahieren und umschreiben
Verfasst: 03.02.2005, 10:17
von Nexus
Hi,
Da ich alle Attribute vom Text haben will, mach ich es so:
Code: Alles auswählen
function getAllLinksInHTML($text) {
preg_match_all('#<a(.+)>(.+)</a>#ismU',$text,$regs);
$links = array();
for($i=0;$i<count($regs[0]);$i++) {
preg_match_all('#(\w+)\s*=\s*"(.*)"#ismU',$regs[1][$i],$regs2);
$attribs = array();
for($ii=0;$ii<count($regs2[0]);$ii++) {
$attribs[strtolower($regs2[1][$ii])] = $regs2[2][$ii];
}
$links[] = array(
'text' => $regs[2][$i],
'attribs' => $attribs,
);
}
return $links;
}
zurückgegeben wird ein Array. Erstes Element ist der Linktext/Grafik, zweites Element ist ein Array mit allen Attributen von <a>. Die Url findet sich dann im Element href.
Am besten mal ausprobieren und mit
Code: Alles auswählen
print_r(getAllLinksInHTML(file_get_contents('datei.html')));
anschauen.
Gruß
Raphael
php: Links extrahieren und umschreiben
Verfasst: 03.02.2005, 12:23
von bull
Danke erstmal. Sobald allerdings onmouseover oder ähnliches drin ist, ist das Ergebnis nicht mehr befriedigend.
Mein konkretes Problem ist:
Code: Alles auswählen
while (eregi("(<frame[^>]*src[[:blank:]]*=|href[[:blank:]]*=|http-equiv=['\"]refresh['\"] *content=['\"][0-9]+;[[:blank:]]*url[[:blank:]]*=|window[.]location[[:blank:]]*=|window[.]open[[:blank:]]*[(])[[:blank:]]*[\'\"]?((([a-z]{3,5}://)+(([.a-zA-Z0-9-])+(:[0-9]+)*))*($allowed_link_chars\[?$allowed_link_chars\]?$allowed_link_chars))(#[.a-zA-Z0-9-]*)?[\'\" ]?",$eval, $regs))
{
$eval = str_replace($regs[0],"",$eval);
...
dahingehend zu modifizieren, daß auch noch der Ankertext ausgelesen wird (wer den zitierten Code kennt hat 100 Punkte). Habe mich gestern länger daran versucht.