文字列中のURLを自動的にリンクさせる - Perl

この記事は2006年10月04日に書かれたものです。

掲示板などのプログラムで、文字列中にURLが含まれる場合、自動的にハイパーリンクが張られている場合がある。これを実装するにはどうすれば良いだろうか?

単純にURL(URI)の正規表現を用いて、置換を行えば良い。以下のサンプルではurlAutoLinkという関数内で置換処理を実行している。

サンプル

;#
;#自動リンク
;#
 
#-- シンプル --#
$result1 = urlAutoLink('私のサイトはhttp://ichikoro.com/です');
 
#-- 細かい指定 --#
$result2 = urlAutoLink(
        '私のサイトはhttp://ichikoro.com/です'
         , '_blank'
         , {  title => '新しいウィンドウが開きます'
            , style => 'color: Pink'
           }
      );
 
#-- 表示 --#
print "$result1\n\n";
print "$result2\n";
 
 
sub urlAutoLink{
  my $str   = shift;
  my $target  = shift || '_self';   #target属性の値
  my $zokusei = shift;        #ハッシュのリファレンス
  my $add_zokusei = '';
 
  #-- 属性の作成 --#
  foreach my $name ( keys %$zokusei ){
    $add_zokusei .= qq|$name="$zokusei->{$name}" |;
  }
  chop $add_zokusei;
 
  #-- 置換 --#
  $str =~ s/(s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/<a href="$1" target="$target" $add_zokusei>$1<\/a>/g;
 
  return($str);
}

実行結果

私のサイトは<a href="http://ichikoro.com/" target="_self" >http://ichikoro.com/</a>です
私のサイトは<a href="http://ichikoro.com/" target="_blank" style="color: Pink" title="新しいウィンドウが開きます">http://ichikoro.com/</a>です

urlAutoLinkでは http(https) のみのサポートとなっているが、同じ要領でftpやメールアドレスなども自動的にリンクさせることが可能である。またこの関数では文字列中に " や ' などが含まれていてもエスケープされない点に注意されたい。

参考

関連書籍

コメント

コメントを入力. Wiki文法が有効です:
D᠎ M O L C