CGI-BBS > 電子掲示板 > 簡易BBS > 簡易BBSの改造でhttp://のタグの使用を禁止したい。


カレッヂ
カレッヂ


質問者 てつ  投稿日 11/13(水) 12:26:02
はじめまして。
簡易BBS2000を設置したのですが、宣伝目的のURL貼り付けが多くて困っています。
できることなら、http://から始まるURLを入力不可能にしたいのですが。
http://の文章をリンクさせないくらいなら、がんばればできそうかもしれませんが、
目障りなので、禁止にしたいです。
難しいでしょうか?

特定の名前で書き込むとエラーになるように改造はしてあります。

プロバイダ参照:http://www.cool.ne.jp/
サーバのOS:不明
パソコンのOS:Win95系
エディタ:perl editor
FTPソフト:ffftp
サーバ移転:した
改造:している 改造前正常動作
CGI習熟度:middle

回答者 しあわせのツボ  [削除]  投稿日 11/13(水) 14:02:07
line 556
$value =~ s/(https?|ftp|gopher|telnet|whois|news)\:([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/<a href=\"$1\:$2\" target=\"_blank\">$1\:$2<\/a>/ig;
がURIのリンク処理です。
やっていることはただの文字列置換なので、これを逆用できます。
つまり
$value =~ s/(https?|ftp)\:([\w|\:\!\#\$\%\=\&\-\@\~\;\+\,\.\?\/]+)/<del>URIは書いちゃだめ<\/del>/ig;
のように書き換えればよいでしょう。
回答者 しあわせのツボ  [削除]  投稿日 11/13(水) 14:06:30
追加。
そもそも書き込ませたくないなら、リンク処理をコメントアウトし、かわりに
if ($value =~ s/(https?|ftp)\:\/\/\w/) { &error('エラー','URIは書いちゃ嫌'); }
と書けば大丈夫だと思います。
質問者 てつ  [削除]  投稿日 11/13(水) 14:50:39
丁寧な回答をありがとうございます。
一つ目は何の問題もなくできたのですが、

>追加。
そもそも書き込ませたくないなら、リンク処理をコメントアウトし、かわりに
if ($value =~ s/(https?|ftp)\:\/\/\w/) { &error('エラー','URIは書いちゃ嫌'); }
と書けば大丈夫だと思います。

これができません。
コメントアウトとは、リンク処理を全部消すことなのでしょうか?
となると、いろんなところをいじらなくてはならないということなのでしょうか?

もし、簡単なのであれば、
何行目のどういう文章を上の文章と置き換えればよいのか教えてもらえませんか?

ぜんぜんわからなくてごめんなさい。

一応自分でもいろいろいじくってみます。
回答者 いのちゃん  [削除]  投稿日 11/13(水) 16:20:52
<b>コメントアウト</b>とは行頭に“#”を追記すればその行は未記入と同様の扱いに
なると言う意味です。
回答者 しあわせのツボ  [削除]  投稿日 11/13(水) 16:27:51
コメントアウトというのは、その行の先頭に#を書き足すことを言います。
#があると、Perlはそこからその行末までを無視します。

いじる場所はどちらも同じline 566です。
それをコメントアウト又は削除し、そこに例示したものを追加してください。
質問者 てつ  [削除]  投稿日 11/13(水) 18:21:46
しあわせのツボさん、いのちゃんさん、ご返答ありがとうございます。
コメントアウトして、
if ($value =~ s/(https?|ftp)\:\/\/\w/) { &error('エラー','URIは書いちゃ嫌'); }
を入れたのですが、
えっと、500internet server error になりました。

ぜんぜんわからないんですが、リンク処理の文章は、文字の置換をしているだけと、
聞いたので、実際、cgiを動かしたときには、表示される文章に、使われていた
URLは全部URLはだめの横線引き、の文章になっていました。
そこをこの
if ($value =~ s/(https?|ftp)\:\/\/\w/) { &error('エラー','URIは書いちゃ嫌'); }
書き込みをはじくプログラムを組み込むと、表示はどうなるんでしょうねぇ。
今までhttp://〜は、表示できなくて、矛盾が出てくるのでしょうか?

それとも、今までのは表示されるけれども、今後は投稿できないようになるのでしょうか?
(そうなったらとても都合がいいのですが。)
プログラム的に無理なのでしょうか?

回答者 しあわせのツボ  [削除]  投稿日 11/14(木) 00:57:26
タイプミスしてました。すみません。
&error は &Error の誤りです。
回答者 yam  [削除]  投稿日 11/14(木) 03:39:57
あと、s/ は / かと。
質問者 てつ  [削除]  投稿日 11/14(木) 06:28:45
if ($value =~ /(https?|ftp)\:\/\/\w/) { &Error('エラー','URIは書いちゃ嫌'); }
で、できました。
が、書き込みをはじくのではなくて、本文表示自体にエラーが出てしまい、その投稿以前の
書き込みはまったく表示されないので、ちょっと、利用は難しいです。
しかし、
$value =~ s/(https?|ftp)\:([\w|\:\!\#\$\%\=\&\-\@\~\;\+\,\.\?\/]+)/<del>URIは書いちゃだめ<\/del>/ig;
は書き込みはされてはしまうけれども、URLは表示されないので、応急処置にはなったと思います。

しあわせのツボさん、yamさん、どうもありがとうございました。

それにしても、皆さんのプログラムの技術の高さには感心しました。
どうもありがとうございました。

返信(回答)する


Web裏技