Perlについて質問です。掲示板のスクリプトでURLを記入すると自動リンクになる機能があるのですが、テーブルを使っているので長いURLを表示するとレイアウトが崩れてしまいます。そこで、長いURLの場合、後半のURLを省略して表示するようにしたいのです。(例えば「http://webmaster.hatena.ne.jp/list?of=・・・」のように一定の長さを超えた部分は・・・で表示する)たぶん、この部分に手を加えれば何とかなると思うのですが。sub auto_link {$_[0] =~ s/([^=^¥”]|^)(http¥:[¥w¥.¥~¥-¥/¥?¥&¥+¥=¥:¥@¥%¥;¥#¥%]+)/$1<a href=¥”$2¥”>$2<¥/a>/g;}リンク先を明示したいのでURL全体を他の文字や画像に置き換えることはしたくありません。ちなみに掲示板のスクリプトはKENT WEBのPETIT BOARDを使っています。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2003/11/18 12:14:43
  • 終了:--

回答(6件)

id:rabienrose No.1

らんさいわ回答回数29ベストアンサー獲得回数02003/11/18 14:12:56

ポイント10pt

かなり雑多な処理ですが、こんな感じでどうでしょうか?手を加えるというより新しく作っている感じですが…。

とりあえず先頭の「max_num」がリンク文字列の最大数です。返値等は全く一緒にしたので、sub auto_link{}をそのまま入れ替えて、max_numを指定すれば大丈夫だと思います。

$max_num = 20;

sub auto_link {

$text = $_[0];

@http = $text =~ /s?https?:¥/¥/[-_.!~*’()a-zA-Z0-9;¥/?:¥@&=+¥$,%#]+/g;

foreach $out (@http){

if(length($out) > $max_num){

$o_url = substr($out,0,$max_num);

$o_url .= ”…”;

}

$text =~ s/$out/<a href=”$out”>$o_url<¥/a>/;

}

$_[0] = $text;

}

id:masi No.2

masi回答回数356ベストアンサー獲得回数02003/11/18 14:13:46

ポイント10pt

sub auto_link {

if(length($_[0])>20){

$_[0] =~ s/([^=^¥”]|^)(http¥:[¥w¥.¥~¥-¥/¥?¥&¥+¥=¥:¥@¥%¥;¥#¥%]+)/$1<a href=¥”$2¥”>$2<¥/a>/g;

}else{

$str=substr($_[0],0,20);

$_[0] =~ s/([^=^¥”]|^)(http¥:[¥w¥.¥~¥-¥/¥?¥&¥+¥=¥:¥@¥%¥;¥#¥%]+)/$1<a href=¥”$2¥”>$str...<¥/a>/g;

}

}

id:aki73ix No.3

aki73ix回答回数5224ベストアンサー獲得回数272003/11/18 12:27:23

ポイント20pt

例えば

$name = pack(”S n a4 x8”, 2, 80, $addr);

socket(S, 2, 1, 0);

connect(S, $name);

binmode(S);

select(S);

$| = 1;

select(stdout);

print S ”GET ”,$file,” HTTP/1.0¥r¥nhost:”,$host,”¥r¥n¥r¥n”;

@que = <S>;

close(S);

のようにして、リンク先の内容を取り出して <HEAD>の

中身をINDEXで取り出してリンク先にするのはいかがですか?

id:mken03 No.4

mken03回答回数47ベストアンサー獲得回数02003/11/18 12:43:47

ポイント20pt

CGIは詳しくありませんが、URLの文字数を調べて、例えば20文字までは表示し、最後に”...”を追加するというのはいかがでしょう。切りのいいところでスラッシュ3つ目まで表示させればドメインまでは表示されそうですが、ドメインが長ければ意味がなくなってしまいますし、レイアウト的にも文字数がよいかもしれません。

id:kiichigo No.5

kiichigo回答回数167ベストアンサー獲得回数02003/11/18 13:28:34

ポイント20pt

$ echo ’

’ | perl -pe ’s/([^=^]|^)(http¥:[¥w¥.¥~¥-¥/¥?¥&¥+¥=¥:¥@¥%¥;¥#¥%]+)/($a,$b)=($1,$2);if(length($b)>30){$b=~m@(.{30})@;$c=”$1...”};”$a<a href=$b>$c<¥/a>”/eg’

<a href=

id:sasada No.6

sasada回答回数1482ベストアンサー獲得回数1332003/11/18 13:44:56

ポイント20pt

 一発変換はややこしいので、地道に

sub auto_link {

my $a = ””;

while ( $_[0] =~ m/([^=^¥”]|^)(http¥:[¥w¥.¥~¥-¥/¥?¥&¥+¥=¥:¥@¥%¥;¥#¥%]+)/g ) {

$a .= ”$1<a href=¥”$2¥”>”

. ( (length($2) < $maxlen) ? $2 : substr($2 , 0 , $maxlen) . ”・・・” )

. ”<¥/a>”;

} ;

$a = $_[0] if $a eq ””;

return $a;

}

とかしては どうでしょうか?

 ($maxlenに最大文字列長が入っているとして。)

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません