Thread Email::Find und E-Mails in Links?
(14 answers)
Opened by bianca at 2010-06-01 16:22
So geht es, aber sicher kann noch etwas durch schlüpfen.
Code (perl): (dl
)
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 37 38 39 40 41 42 43 44 45 46 47 #--------# sub identifylinks { # # Erkennt und markiert Hyperlinks in einem Text # # Aufruf: # ======= # my $testtext = 'test: http://www.test.de'; # identifylinks (\$testtext,'<a href="%s" target="_blank">%s</a>','<a href="mailto:%s">%s</a>'); # print $testtext; # my $text = $_[0]; my $link = $_[1]; my $email_link = (defined $_[2] ? $_[2] : ''); my %found; my $modul = 1; eval "use URI::Find; 1;" or $modul = 0; if ($modul) { my $finder = URI::Find -> new ( sub { $found{$_[0]}++; $found{$_[1]}++; return sprintf ($link,@_); } ); $finder -> find ($text); } if ($email_link ne '') { # E-Mail auch erwünscht? eval "use Email::Find; 1;" or $modul = 0; if ($modul) { my $finder = Email::Find -> new (sub { return $_[1] if($found{$_[0]->format}); return $_[1] if($found{'http:'.$_[0]->format}); return $_[1] if($found{$_[1]}); return $_[1] if($found{'http:'.$_[1]}); return sprintf ($email_link,$_[0]->format,$_[1]); } ); $finder -> find ($text); } } } #--------# oder so: hat aber den Nachteil, dass etwas in "@" gewandelt erden könnte was nicht "@" sein sollte. Code (perl): (dl
)
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 37 38 39 40 41 #--------# sub identifylinks { # # Erkennt und markiert Hyperlinks in einem Text # # Aufruf: # ======= # my $testtext = 'test: http://www.test.de'; # identifylinks (\$testtext,'<a href="%s" target="_blank">%s</a>','<a href="mailto:%s">%s</a>'); # print $testtext; # my $text = $_[0]; my $link = $_[1]; my $email_link = (defined $_[2] ? $_[2] : ''); my $modul = 1; eval "use URI::Find; 1;" or $modul = 0; if ($modul) { my $finder = URI::Find -> new ( sub { $_[0]=~s/\@/\0---at---\0/g; $_[0]=~s/\@/\0---at---\0/g; return sprintf ($link,@_); } ); $finder -> find ($text); } if ($email_link ne '') { # E-Mail auch erwünscht? eval "use Email::Find; 1;" or $modul = 0; if ($modul) { my $finder = Email::Find -> new ( sub { return sprintf ($email_link,$_[0]->format,$_[1]); } ); $finder -> find ($text); } } $$text=~s/\0---at---\0/\@/g; } #--------# Das wäre es was mir so auf Anhieb einfiele. Edit: Blöder kleiner Fehler beseitigt. Edit2: Besseres Trennzeichen. Last edited: 2010-06-01 17:50:18 +0200 (CEST) |