Thread Email::Find und E-Mails in Links? (14 answers)
Opened by bianca at 2010-06-01 16:22

topeg
 2010-06-01 17:46
#137856 #137856
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
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)

View full thread Email::Find und E-Mails in Links?