Thread Email::Find und E-Mails in Links?
(14 answers)
Opened by bianca at 2010-06-01 16:22
Danke topeg und pq. Ich habe parallel auch mal gebastelt und auch topeg's Vorschlag mal als Vergleich herangezogen:
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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 #!/usr/bin/perl -W use strict; use warnings; use diagnostics; use Data::Dumper; 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 test Platzhalter ||2|||||||||||| oder (http://test.de/slash/pfad) oder info\@test.example Und hier ein Gemeinschaftstest: http://www.test.de/login_index.php?email=info\@test.example mal schauen... TEXTPLAIN identifylinks (\$testtext,'<a href="%s" target="_blank">%s</a>','<a href="mailto:%s">%s</a>'); print "<pre>$testtext</pre>"; identifylinks_topeg (\$testtext,'<a href="%s" target="_blank">%s</a>','<a href="mailto:%s">%s</a>'); print "<pre>$testtext</pre>"; #--------# 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; my (%uris,%zuordnung); my $erkennung = 1; while ($$text =~ m/\|{$erkennung,$erkennung}/) { # eindeutigen temporären Ersetzungsstring finden $erkennung ++; } if ($modul) { my $lfd_uri = 0; my $finder = URI::Find -> new ( sub { # URI und geschriebenen Link speichern $lfd_uri ++; $uris{$lfd_uri} = $_[0]; $lfd_uri ++; $uris{$lfd_uri} = $_[1]; return sprintf ($link,@_); } ); $finder -> find ($text); } my $ersatz = 0; if (keys %uris) { # alle URI's verbergen vor E-Mail Erkennung $ersatz = 1; foreach my $lfd_uri (keys %uris) { my $ersatz = '|' x $erkennung . $lfd_uri . '|' x $erkennung; $$text =~ s/\Q$uris{$lfd_uri}/$ersatz/g; } } 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); } } if ($ersatz) { # alle verborgenen URI's wieder hervorholen foreach my $lfd_uri (keys %uris) { my $ersatz = '|' x $erkennung . $lfd_uri . '|' x $erkennung; $$text =~ s/\Q$ersatz/$uris{$lfd_uri}/g; } } } #--------# sub identifylinks_topeg { # # 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] : ''); if(eval "use URI::Find; 1;") { my $finder = URI::Find -> new ( sub { return sprintf ($link,@_); } ); my $call=sub{ return $_[0]; }; if($email_link ne '' && eval "use Email::Find; 1;" ) # E-Mail auch erwünscht? { my $finder = Email::Find -> new ( sub { return sprintf ($email_link,$_[0]->format,$_[1]); } ); $call=sub { my $text=shift; $finder -> find (\$text); return $text; }; } $finder -> find ($text, $call); } } #--------# Ausgabe: Code: (dl
)
1 <pre>Dies ist ein kleiner Nach meiner bescheidenen Meinung verhindert topeg's Vorschlag nicht die "Übersetzung" von E-Mail innerhalb von Links oder ich hab es falsch implementiert. Ergänzung (durch Edit): meine Herangehensweise besteht halt darin, die bereits durch URI::Find identifizierten Links dem Modul Email::Find erst garnicht mehr anzubieten, indem ich sie vorher temporär ersetze. Last edited: 2010-06-01 19:06:15 +0200 (CEST) 10 print "Hallo"
20 goto 10 |