CGI-BBS > CGI > Perl > 文章中のリンク、メールアドレスを自動的にリンク付けしたい。


カレッヂ
カレッヂ


質問者 はせがわ  投稿日 11/7(木) 17:20:18
現在、Perlを使った掲示板でここのBBSのような
URLとEメールを自動リンクするものを作りたいのですが
どうしているのかさっぱり分かりません。

URLで思いつくのは 
#$message=本文
if($message=~/http/){
 $url = substr($message, index($message,'http://'), ...分かりません
 $new_url = "<A href="$url">$url</A>";
 $mesage=~s/$url/$new_url/;
}
みたいな感じですがどうやって終わるのやら・・・
それとも正規表現を使うのでしょうか?

メールに関してはさっぱりです。

だれかいいサンプルがある方はお教えください。

プロバイダ参照:www.msn.co.jp
サーバのOS:UNIXサーバ
パソコンのOS:WinNT系
エディタ:秀丸
FTPソフト:FFFTP
サーバ移転:していない
改造:していない
CGI習熟度:expert

回答者 しあわせのツボ  [削除]  投稿日 11/7(木) 19:38:12
レスキューさんのスクリプトから、それを行っている部分を探せば
すぐにわかりますよ。

URIなら
$value =~ s/(https?|ftp|gopher|telnet|whois|news)&#165;:([&#165;w|&#165;:&#165;!&#165;#&#165;$&#165;%&#165;=&#165;&&#165;-&#165;^&#165;`&#165;&#165;&#165;|&#165;@&#165;~&#165;[&#165;{&#165;]&#165;}&#165;;&#165;+&#165;*&#165;,&#165;.&#165;?&#165;/]+)/<a href=&#165;"$1&#165;:$2&#165;" target=&#165;"_blank&#165;">$1&#165;:$2<&#165;/a>/ig;
のような行が見つかりますし、メールも
$FORM{'email'} =~ /&#165;b[-&#165;w.]+@[-&#165;w.]+&#165;.[-&#165;w]+&#165;b/
という正規表現パターンがあるので、これをもとに
$FORM{'email'} =~ s/&#165;b([-&#165;w.]+@[-&#165;w.]+&#165;.[-&#165;w]+)&#165;b/<a href="mailto:$1">$1<\/a>/g;
といった感じで書けますね。
回答者 しあわせのツボ  [削除]  投稿日 11/7(木) 19:58:48
あら…化けてますね。
&#165; は 半角¥ です。
質問者 はせがわ  [削除]  投稿日 11/8(金) 10:50:36
しあわせのつぼ様 ご返答ありがとうございます。

正規表現を使った置き換えはマッチする単語が複数個あると
最初のしか置き換えないと思っていましたがそんなことはなかったです。
URIなら
$value =~ s/(https?|ftp|gopher|telnet|whois|news)¥:([¥w|¥:¥!¥#¥$¥%¥=¥&¥-¥^¥`¥¥¥|¥@¥~¥[¥{¥]¥}¥;¥+¥*¥,¥.¥?¥/]+)/<a href=¥"$1¥:$2¥" target=¥"_blank¥">$1¥:$2<¥/a>/ig;
で全部置換できました。

ただ、¥,は
 http://www.yahoo.co.jp,
 http://www.google.co.jp,
 http://www.msn.com
のように書くとリンクに「,」がまざるのではずしときました。
gopher や news 等をつかわないので分かりませんが 
¥* ¥, ¥[ ¥ {¥] は必要なのでしょうか?

ちなみにメールは今のところ問題なしです。
回答者 しあわせのツボ  [削除]  投稿日 11/8(金) 12:19:05
s/a/b/;
だと最初の1つしか置き換えません。
s/a/b/g;
とgオプションをつけることで、マッチした全てを置き換えます。

,はURIに使ってよい文字で、一部サイトでは実際に使っているようなので
外さない方がよいでしょう。
その他の文字は、レスキューさんのスクリプトから引用しただけなので
必要かどうかわかりません。
YahooかGoogleかに入れてみて、アドレスバーにそのまま表示された文字は必要です。
逆に、%xxに変換された文字は外してよいでしょう。
質問者 はせがわ  [削除]  投稿日 11/8(金) 14:51:25
> s/a/b/g;
> とgオプションをつけることで、マッチした全てを置き換えます。
自分の中では正規表現を使ったマッチの場合
たとえば今回のリンクの場合

 http://www.google.co.jpとhttp://www.msn.com
 ↓
 <A href="http://www.google.co.jp">http://www.google.co.jp</A>と
 <A href="http://www.google.co.jp">http://www.google.co.jp</A>

みたいな感じで置き換えられるのかなぁと思ってました。
特に今回のリンクは $1、$2使っているので
$1=http://
$2=www.google.co.jp
$3=http://
$4=www.msn.com 
....
とリンクの数だけ$番号が増えていくのではと思っていました。(じぶんだけですかねぇ)

> ,はURIに使ってよい文字で、一部サイトでは実際に使っているようなので
> 外さない方がよいでしょう。
そうですか・・・コンマ曲者ですね

> YahooかGoogleかに入れてみて、アドレスバーにそのまま表示された文字は必要です。
> 逆に、%xxに変換された文字は外してよいでしょう。
なるほど

返信(回答)する


Web裏技