Leser: 24
2010-05-18T16:44:27 pq
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
#!/usr/bin/perl -W use strict; use warnings; use diagnostics; my $testtext = <<TEXTPLAIN; Dies ist ein kleiner Test zur Erkennung von Hyperlinks test.de oder www.test.de oder info\@test.example TEXTPLAIN identifylinks ($testtext); #--------# sub identifylinks { my $text = $_[0]; use CGI qw(escapeHTML); use URI::Find; my $finder = URI::Find->new(sub { my($uri, $orig_uri) = @_; return qq|<a href="$uri">$orig_uri</a>|; }); $finder->find(\$text, \&escapeHTML); print "<pre>$text</pre>"; } #--------#
1
2
3
4
5
D:\>perl sub_identifylinks.pl
<pre>Dies ist ein kleiner
Test zur Erkennung von Hyperlinks test.de oder www.test.de
oder info@test.example
</pre>
QuoteThis module does one thing: Finds URIs and URLs in plain text. It finds them quickly and it finds them all (or what URI::URL considers a URI to be.) It only finds URIs which include a scheme (http:// or the like), for something a bit less strict have a look at URI::Find::Schemeless.
2010-05-18T17:46:44 biancaEdit: Sehe gerade, dass hier im Forum in diesem Post dieser mailto a href auch nicht sauber behandelt wird.
2010-05-18T17:48:49 pqdas ist ein bug in einer älteren version von URI::Find, den ich auch reported hatte. ist mittlerweile wohl gefixt, muss nur mal das modul auf dem server updaten.
2010-05-18T17:53:56 pqeine email fällt wohl einfach nicht unter die bezeichnung "URI". schonmal Email::Find versucht? =)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
#!/usr/bin/perl -W use strict; use warnings; use diagnostics; my $testtext = <<TEXTPLAIN; Dies ist ein kleiner Test zur Erkennung von Hyperlinks test.de oder www.test.de oder http://www.test.de oder info\@test.example TEXTPLAIN my $link_auf = '<a href="*URL*" target="_blank">'; my $link_zu = '</a>'; identifylinks (\$testtext,$link_auf,$link_zu); print "<pre>$testtext</pre>"; #--------# sub identifylinks { my $text = $_[0]; my $li = $_[1]; my $re = $_[2]; my $modul = 1; eval "use URI::Find; 1;" or $modul = 0; if ($modul) { my $finder = URI::Find -> new ( sub { my ($uri,$orig_uri) = @_; (my $links = $li) =~ s/\*URL\*/$uri/; return qq|$links$orig_uri$re|; } ); $finder -> find ($text); } } #--------#
my $link_auf = '<a href="%s" target="_blank">';
1 2 3
my ($uri,$orig_uri) = @_; my $links = sprintf($li,$url); return qq|$links$orig_uri$re|;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
#!/usr/bin/perl -W use strict; use warnings; use diagnostics; my $testtext = <<TEXTPLAIN; Dies ist ein kleiner Test zur Erkennung von Hyperlinks test.de oder www.test.de oder http://www.test.de oder https://www.testhttps.de oder http://test.de/slash/pfad oder info\@test.example TEXTPLAIN identifylinks (\$testtext,'<a href="%s" target="_blank">%s</a>'); print "<pre>$testtext</pre>"; #--------# sub identifylinks { my $text = $_[0]; my $link = $_[1]; my $modul = 1; eval "use URI::Find; 1;" or $modul = 0; if ($modul) { my $finder = URI::Find -> new ( sub { return sprintf ($link,@_); } ); $finder -> find ($text); } } #--------#
2010-05-18T18:28:01 pqdas sieht mir genau aus wie topegs code weiter unten.
2010-05-18T18:36:11 topegDie Lösung war recht offensichtlich.
2010-05-18T18:30:43 biancaJa, ich hab auch nach dem Klick auf Antworten keine Meldung bekommen,
QuoteAber ich schwöre, dass ich diese meine Version gerade selbst kombiniert habe.
2010-05-18T18:30:13 topegGib zu du hast abgeschrieben. ;-)
2010-05-18T18:32:07 biancaBei Dir würde ich immer abschreiben!
2010-05-18T18:38:54 topeg2010-05-18T18:32:07 biancaBei Dir würde ich immer abschreiben!
Das kenne ich noch aus der Schule, alle wollten nur abschreiben. :-)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
#!/usr/bin/perl -W use strict; use warnings; use diagnostics; my $testtext = <<TEXTPLAIN; Dies ist ein kleiner Test zur Erkennung von Hyperlinks test.de oder www.test.de oder http://www.test.de oder info\@test.example TEXTPLAIN my $link = '<a href="%s" target="_blank">%s</a>'; identifylinks (\$testtext,$link); print "<pre>$testtext</pre>"; #--------# sub identifylinks { my $text = shift; my $link = shift; my $modul = 1; eval "use URI::Find; 1;" or $modul = 0; if ($modul) { my $finder = URI::Find -> new ( sub { return sprintf($link,@_); } ); $finder -> find($text); } } #--------#