Thread Email::Find und E-Mails in Links?
(14 answers)
Opened by bianca at 2010-06-01 16:22 2010-06-01T17:04:17 bianca Nun ein wenig kompliziert heschrieben. Macht das selbe ist aber etwas einfacher: 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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 #--------# 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 %uris; # eindeutigen temporären Ersetzungsstring finden my $kennung = 'X'; $kennung+=chr(int(65+rand(25))) while (index($kennung,$$text)>-1); my $uri_mod=eval "use URI::Find; 1;" || 0; my $mail_mod=0; $mail_mod=1 if($email_link ne '' && eval "use Email::Find; 1;"); if ($uri_mod) { my $lfd_uri = 0; my $finder = URI::Find -> new ( sub { # URI und geschriebenen Link speichern if($mail_mod) { my $origin=shift; my $text=shift; my $symbol_o=sprintf('%s%u',$kennung,++$lfd_uri); my $symbol_t=sprintf('%s%u',$kennung,++$lfd_uri); $uris{$symbol_o}=$origin; $uris{$symbol_t}=$text; return sprintf ($link,$symbol_o,$symbol_t); } else { return sprintf ($link,@_); } } ); $finder -> find ($text); } # E-Mail auch erwünscht? if ($mail_mod) { my $finder = Email::Find -> new ( sub { return sprintf ($email_link,$_[0] -> format,$_[1]); } ); $finder -> find ($text); $$text=~s/$_/$uris{$_}/g for(keys(%uris)); } } #--------# |