Alles Hyperlinks aus einer Datei anzeigen lassen - wie?
Alles Hyperlinks aus einer Datei anzeigen lassen - wie?
Hallo Profis,
ich suche nach einer Möglichkeit, mit alle Hyperlinks aus einem beliebigen Text anzeigen zu lassen.
Dieser Text kann auch eine HTML-Datei sein.
Absolute Links zu Grafiken (JPG/GIF/PNG) sollen dagegen nicht angezeigt werden.
Ich werde das Gefühl nicht los, dass das am einfachsten mit Regulären Ausdrücken zu realisieren ist, aber die sind leider nicht meine Freunde...
Hat jemand so etwas schon mal gemacht?
Wer kann mir ein Codelet möglichst in PHP zur Verfügung stellen?
Danke für alle Eure Antworten und Tipps!
P.S. Die PHP-FAQ
Wie finde ich alle Links in einer HTML-Datei?
http://www.dclp-faq.de/q/q-regexp-links-finden.html
bringt nicht wirklich weiter, weil ich die Links ja nicht unbedingt in einer HTML-Datei suche (kein "<a href ...")
Gruss aus Mönchengladbach
Thomas
ich suche nach einer Möglichkeit, mit alle Hyperlinks aus einem beliebigen Text anzeigen zu lassen.
Dieser Text kann auch eine HTML-Datei sein.
Absolute Links zu Grafiken (JPG/GIF/PNG) sollen dagegen nicht angezeigt werden.
Ich werde das Gefühl nicht los, dass das am einfachsten mit Regulären Ausdrücken zu realisieren ist, aber die sind leider nicht meine Freunde...
Hat jemand so etwas schon mal gemacht?
Wer kann mir ein Codelet möglichst in PHP zur Verfügung stellen?
Danke für alle Eure Antworten und Tipps!
P.S. Die PHP-FAQ
Wie finde ich alle Links in einer HTML-Datei?
http://www.dclp-faq.de/q/q-regexp-links-finden.html
bringt nicht wirklich weiter, weil ich die Links ja nicht unbedingt in einer HTML-Datei suche (kein "<a href ...")
Gruss aus Mönchengladbach
Thomas
Re: Alles Hyperlinks aus einer Datei anzeigen lassen - wie?
Wo suchst du denn sonst noch links ? Denn eigentlich ist in fast jedem Link ein "<a href" ...weil ich die Links ja nicht unbedingt in einer HTML-Datei suche (kein "<a href ...")
Re: Alles Hyperlinks aus einer Datei anzeigen lassen - wie?
Danke erstmal für Deine Antwort.
Nehme als weiteres Beispiel vielleicht einfach eine Text-eMail, wo mitten im Text ein Hyperlink steht:
So, und alle Links, die in so einem Text/Mail sind, möchte ich angezeigt bekommen.
Ich hoffe es nun besser und verständlicher dargestellt zu haben und freue mich auf Eure verwertbaren Antworten!
Gruss aus Mönchengladbach
Thomas
Ich spreche nicht von einer HTML-Datei, also gibt es da auch keine "<a href..."PHP-Tom wrote: ich suche nach einer Möglichkeit, mir alle Hyperlinks aus einem beliebigen Text anzeigen zu lassen.
Nehme als weiteres Beispiel vielleicht einfach eine Text-eMail, wo mitten im Text ein Hyperlink steht:
Code: Select all
bla bla bla bla
bla bla bla bla
http://www.rootforum.de
bla bla bla bla
bla bla bla bla
Ich hoffe es nun besser und verständlicher dargestellt zu haben und freue mich auf Eure verwertbaren Antworten!
Gruss aus Mönchengladbach
Thomas
Re: Alles Hyperlinks aus einer Datei anzeigen lassen - wie?
Such doch einfach zeile für zeile nach http:// ab! Link ist link, egal ob da nen bild hinter ist oder nicht... natürlich könntest du das noch ausgrenzen, in dem du gif, jpg und sowas ausschließt.
Realisieren würde ich das mit einem zeilenweise einlesen der datei und dann einfach suchen, mit if-abfragen arbeiten und wenn was gefunden wurde in z.b. eine text-datei oder datenbank schreiben.
helfen sollten da die einzelnen rubriken der php-doku (http://www.php3.de/manual/de/).
gruß
Daniel
Realisieren würde ich das mit einem zeilenweise einlesen der datei und dann einfach suchen, mit if-abfragen arbeiten und wenn was gefunden wurde in z.b. eine text-datei oder datenbank schreiben.
helfen sollten da die einzelnen rubriken der php-doku (http://www.php3.de/manual/de/).
gruß
Daniel
Re: Alles Hyperlinks aus einer Datei anzeigen lassen - wie?
Was heisst denn "einfach suchen"?DSpeicher wrote:... und dann einfach suchen, mit if-abfragen arbeiten ...
Ich möchte nicht die Zeile ZEICHENWEISE von Anfang bis Ende nach "http://" durchsuchen und wenn ich die Position einer Fundstelle gefunden habe bis zum nächsten Blank forschen müssen, um dann in der Differenz der beiden Positionen den Link zu erhalten.
Danke, aber darauf bin ich auch schon selber gekommen... :?
Ich halte diese Vorgehensweise nicht für sonderlich performant und denke, es sollte einfacher mit einem Regulären Ausdruck, ähnlich dem aus der PHP-FAQ, funktionieren.
Nur leider nenne ich mich "PHP-Tom" und nicht "RegEx-Tom"...
Demzufolge bin ich leider nicht in der Lage, den Ausdruck abzuändern/zu erweitern...
Gruss aus Mönchengladbach
Thomas
Re: Alles Hyperlinks aus einer Datei anzeigen lassen - wie?
Probier es mal damit....sollte als Basis erstmal halbwegs funktionieren. Es holt alle Links in dieser Form:
heraus...
Hab noch was verändert..hiermit bekommst du auch php?a=b links heraus
Code: Select all
<a href=http://www.rootforum.de>blabla</a>
http://www.rootforum.de
http://www.rootforum.de
www.rootforum.deCode: Select all
<?php
$file = "blabla.html";
$fd = fopen ("$file", "r");
while (!feof($fd)) {
$buffer = fgets($fd, 4096);
if (preg_match_all("/((http://|www)([w.]+))/", "$buffer", $parts, PREG_SET_ORDER)) {
foreach($parts as $matches) { print "$matches[0]<br>"; }
}
}
fclose ($fd);
?>Hab noch was verändert..hiermit bekommst du auch php?a=b links heraus
Code: Select all
<?php
$file = "blabla.html";
$fd = fopen ("$file", "r");
while (!feof($fd)) {
$buffer = fgets($fd, 4096);
if (preg_match_all("/((http://|www)([w.?=;&]+))/", "$buffer", $parts, PREG_SET_ORDER)) {
foreach($parts as $matches) { print "$matches[0]<br>"; }
}
}
fclose ($fd);
?>Re: Alles Hyperlinks aus einer Datei anzeigen lassen - wie?
ich vergess immer die Hälfte...jetzt auch mit ftp-support :)
Code: Select all
<?php
$file = "blabla.html";
$fd = fopen ("$file", "r");
while (!feof($fd)) {
$buffer = fgets($fd, 4096);
if (preg_match_all("/((http://|ftp://|www|ftp)([w.?=;&]+))/", "$buffer", $parts, PREG_SET_ORDER)) {
foreach($parts as $matches) { print "$matches[0]<br>"; }
}
}
fclose ($fd);
?>Re: Alles Hyperlinks aus einer Datei anzeigen lassen - wie?
Super, so muss Code aussehen... kurz und bündig...!
Erstmal vielen Dank, aber die Snipplets funktionieren leider bei mir nicht...
Es scheint, also ob es Probleme bei URLs wie
gäbe... Nach dem Bindestrich wird in der Ausgabe alles abgeschnitten...
Ob Du da nochmal drüber schauen könntest...? Die Hieroglyphen sagen mir leider gar nix...
DANKE!
Gruss aus Mönchengladbach
Thomas
Erstmal vielen Dank, aber die Snipplets funktionieren leider bei mir nicht...
Es scheint, also ob es Probleme bei URLs wie
Code: Select all
http://www.abc-xyz.deOb Du da nochmal drüber schauen könntest...? Die Hieroglyphen sagen mir leider gar nix...
DANKE!
Gruss aus Mönchengladbach
Thomas
Re: Alles Hyperlinks aus einer Datei anzeigen lassen - wie?
PHP-Tom wrote:Es scheint, also ob es Probleme bei URLs wie
gäbe...Code: Select all
http://www.abc-xyz.de
Code: Select all
<?php
$file = "link.html";
$fd = fopen ("$file", "r");
while (!feof($fd)) {
$buffer = fgets($fd, 4096);
if (preg_match_all("/((http://|ftp://|www|ftp)([w.?=;&-]+))/", "$buffer", $parts, PREG_SET_ORDER)) {
foreach($parts as $matches) { print "$matches[0]<br>"; }
}
}
fclose ($fd);
?>Re: Alles Hyperlinks aus einer Datei anzeigen lassen - wie?
OK, super - jetzt klappt es auch mit dem Bindestrich! :lol:
Allerdings werden mir leider nicht die vollständigen Links in der Form
http://www.abc.de/skript.php?op=eintrag ... ragsid=129
angezeigt... Hier wird lediglich der Hostname angezeigt.
Bei Parametern scheint es also noch zu ein wenig hapern...
Erkennst Du die Ursache?
An was man nicht alles denken muss... :?
Ach ja: "erkennt" das Skript auch schon "https"-Aufrufe?
Vielen lieben Dank bis jetzt!!!
Gruss aus Mönchengladbach
Thomas
Allerdings werden mir leider nicht die vollständigen Links in der Form
http://www.abc.de/skript.php?op=eintrag ... ragsid=129
angezeigt... Hier wird lediglich der Hostname angezeigt.
Bei Parametern scheint es also noch zu ein wenig hapern...
Erkennst Du die Ursache?
An was man nicht alles denken muss... :?
Ach ja: "erkennt" das Skript auch schon "https"-Aufrufe?
Vielen lieben Dank bis jetzt!!!
Gruss aus Mönchengladbach
Thomas
Re: Alles Hyperlinks aus einer Datei anzeigen lassen - wie?
Jetzt schon....aber wie gesagt..das ganze ist ziemlich hingeschlampert von mir....also nicht so genau auf den Code gucken ;)PHP-Tom wrote:Allerdings werden mir leider nicht die vollständigen Links in der Form
http://www.abc.de/skript.php?op=eintrag ... ragsid=129
angezeigt...
Ach ja: "erkennt" das Skript auch schon "https"-Aufrufe?
Code: Select all
<?php
$file = "link.html";
$fd = fopen ("$file", "r");
while (!feof($fd)) {
$buffer = fgets($fd, 4096);
if (preg_match_all("/((https://|http://|ftp://|www|ftp)([w.?/=;&-;]+))/", "$buffer", $parts, PREG_SET_ORDER)) {
foreach($parts as $matches) { print "$matches[0]<br>"; }
}
}
fclose ($fd);
?>Re: Alles Hyperlinks aus einer Datei anzeigen lassen - wie?
SUPER - es klappt!!! Genau das ist es, was ich gesucht habe!!!
Klasse, prima - vielen Dank, skep!!!
Gruss aus Mönchengladbach
Thomas
Klasse, prima - vielen Dank, skep!!!
Ich wünschte, ich könnte so was tolles schlampern...skep wrote:das ganze ist ziemlich hingeschlampert von mir
Gruss aus Mönchengladbach
Thomas
Re: Alles Hyperlinks aus einer Datei anzeigen lassen - wie?
Ach, eines fällt mir gerade noch auf:
Anker werden nicht angezeigt:
Gruss aus Mönchengladbach
Thomas
Anker werden nicht angezeigt:
Ob das wohl noch relativ leicht und schnell zu erweitern wäre - oder sprengt das nun das Skript...?
Gruss aus Mönchengladbach
Thomas
Re: Alles Hyperlinks aus einer Datei anzeigen lassen - wie?
Schau dir mal genau an was ich geändert habe..dann kannst du es beim nächsten Update selber ;)PHP-Tom wrote:Anker werden nicht angezeigt:
Code: Select all
<?php
$file = "link.html";
$fd = fopen ("$file", "r");
while (!feof($fd)) {
$buffer = fgets($fd, 4096);
if (preg_match_all("/((https://|http://|ftp://|www|ftp)([w.?/=;&-;#]+))/", "$buffer", $parts, PREG_SET_ORDER)) {
foreach($parts as $matches) { print "$matches[0]<br>"; }
}
}
fclose ($fd);
?>Re: Alles Hyperlinks aus einer Datei anzeigen lassen - wie?
Yep, jetzt funzt es! Vielen Dank!!!
Sorry, dass ich Dich so genervt habe, skep - Du hast mir wirklich sehr geholfen! Hast was gut bei mir - wenn Du also mal etwas brauchst -> PN!
Gruss aus Mönchengladbach
Thomas
Ich sehe es zwar, aber verstehen tue ich es nicht... sorry. Diese regulären Hieroglyphen kriege ich einfach nicht in mein Brain - hab´s schon so oft versucht, aber da versagt mein Intellekt...skep wrote:Schau dir mal genau an was ich geändert habe..dann kannst du es beim nächsten Update selber ;)
Sorry, dass ich Dich so genervt habe, skep - Du hast mir wirklich sehr geholfen! Hast was gut bei mir - wenn Du also mal etwas brauchst -> PN!
Gruss aus Mönchengladbach
Thomas
Regex-Lernen
Hallo,
Regex sind sehr mächtig und es macht eigentlich Spaß, sie einzusetzen. Ich finde, bei Perl ist ein gutes Tutorial dabei.
Einfach am Prompt "man perlretut" (für PERL REgex TUTorial) tippen. Bei meinem Root-Server (Suse 7.2 ist das zwar noch nicht dabei, aber daheim auf meinem Suse 7.3 schon).
Grüße
Pollux
Regex sind sehr mächtig und es macht eigentlich Spaß, sie einzusetzen. Ich finde, bei Perl ist ein gutes Tutorial dabei.
Einfach am Prompt "man perlretut" (für PERL REgex TUTorial) tippen. Bei meinem Root-Server (Suse 7.2 ist das zwar noch nicht dabei, aber daheim auf meinem Suse 7.3 schon).
Grüße
Pollux
Re: Alles Hyperlinks aus einer Datei anzeigen lassen - wie?
Der vorbenannte RegEx versieht jetzt schon einige Monate prima seinen Dienst - aber nun kommen ja die neuen Umlautdomains und die möchte ich auch vom RegEx erfassen lassen...
Zur Erinnerung - ich verwende diesen RegEx, um alle vollständigen URLs (nur http/s) inkl. aller Parameter, Anker etc. aus einem Text zu extrahieren:
Klappt einwandfrei, allerdings erkennt er die neuen IDN-Sonderzeichen nicht - die müsste ich ihm jetzt noch beibringen, aber ich schaffe es einfach nicht, bzw. ich will nicht alle Zeichen einzeln in den RegEx einbringen (da ich auch nicht weiss, ob das so einfach zeichensatztechnisch möglich ist). Gibt es da keine Möglichkeit, einen "Character-Range" auf Dezimalcode-Basis in den obigen RegEx einzubauen, damit auch die neuen möglichen Zeichen erkannt werden?
Ihr würdet mir echt sehr helfen!!! Danke im voraus!
Gruss,
Thomas[/code]
Zur Erinnerung - ich verwende diesen RegEx, um alle vollständigen URLs (nur http/s) inkl. aller Parameter, Anker etc. aus einem Text zu extrahieren:
Code: Select all
preg_match_all("/((https://|http://)([w.?/=,%&-;:+$@#]+))/i", "$text", $parts, PREG_SET_ORDER)Klappt einwandfrei, allerdings erkennt er die neuen IDN-Sonderzeichen nicht - die müsste ich ihm jetzt noch beibringen, aber ich schaffe es einfach nicht, bzw. ich will nicht alle Zeichen einzeln in den RegEx einbringen (da ich auch nicht weiss, ob das so einfach zeichensatztechnisch möglich ist). Gibt es da keine Möglichkeit, einen "Character-Range" auf Dezimalcode-Basis in den obigen RegEx einzubauen, damit auch die neuen möglichen Zeichen erkannt werden?
Ihr würdet mir echt sehr helfen!!! Danke im voraus!
Gruss,
Thomas[/code]
-
majortermi
- Userprojekt

- Posts: 916
- Joined: 2002-06-17 16:09
Re: Alles Hyperlinks aus einer Datei anzeigen lassen - wie?
Entweder du masst erst den Domain-Part dekodieren, oder deine RegExp-Implementierung muss Unicode-fähig sein, ansonsten macht der Umgang mit IDNs nämlich keinen Sinn.PHP-Tom wrote:Klappt einwandfrei, allerdings erkennt er die neuen IDN-Sonderzeichen nicht - die müsste ich ihm jetzt noch beibringen, aber ich schaffe es einfach nicht, bzw. ich will nicht alle Zeichen einzeln in den RegEx einbringen (da ich auch nicht weiss, ob das so einfach zeichensatztechnisch möglich ist). Gibt es da keine Möglichkeit, einen "Character-Range" auf Dezimalcode-Basis in den obigen RegEx einzubauen, damit auch die neuen möglichen Zeichen erkannt werden?[/code]
Erst nachlesen, dann nachdenken, dann nachfragen... :)
Warum man sich an diese Reihenfolge halten sollte...
Warum man sich an diese Reihenfolge halten sollte...
Re: Alles Hyperlinks aus einer Datei anzeigen lassen - wie?
Domains vorher dekodieren geht leider nicht - die stehen schon als IDN im Text drin. Bleibt also nur die Unicode-Implementierung - aber da weiss ich absolut nicht, wie ich das machen soll...
Hat so etwas schon mal jemand gemacht und kann mir helfen?
Danke!
Gruss,
Thomas
Hat so etwas schon mal jemand gemacht und kann mir helfen?
Danke!
Gruss,
Thomas