人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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を使っています。

●質問者: masami_kawa
●カテゴリ:ウェブ制作
✍キーワード:HTTP KENT Perl sub URL
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● らんさいわ
●10ポイント

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

とりあえず先頭の「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;

}


2 ● masi
●10ポイント

http://www.comm.soft.iwate-pu.ac.jp/ichisawa/perl/3.html

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;

}

}


3 ● aki73ix
●20ポイント

http://tohoho.wakusei.ne.jp/wwwperl.htm

例えば

$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で取り出してリンク先にするのはいかがですか?


4 ● mken03
●20ポイント

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


5 ● kiichigo
●20ポイント

$ echo ’

http://www.hatena.nr.jp/abcdefghij

’ | 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=

http://www.hatena.nr.jp/abcdefghij>http://www.hatena.nr.jp/ab...


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ