CGIROOM で配布されている
CGI機能拡張用のプログラム『ワードチェック』
(伝言板などに禁止ワードを設定できる)
…を利用しているのですが、
これ↑に"登録することができない単語
(つか、文字)"…って、ありますか??
例えば「半角カンマは駄目」とか。。。
「半角スペースを入れちゃ駄目」とか。。。
登録する単語の数に制限は無いので、
沢山登録したら、…最近、何を書いても
禁止ワード扱いされ、投稿が出来なく
なってしまいました~(^_^;)
■備考■
my $word=<<'WORD';
馬鹿
死ね!
ウンチ
WORD
↑こんな風に『my $word=<<'WORD';』
と『WORD』の間に、投稿されたくない単語
を書くようになってます。
No.4ベストアンサー
- 回答日時:
大事なのは「どの単語がダメなのか」ではなく、「なぜダメな単語があるのか」だと思うんですよ。
それさえ分かれば、プログラムを直して、思い通りに動かすことができるようになるわけです。
そんなわけで前回のアドバイスは、
> その単語を消せば正常に動くようになる…
などという身もフタもないことを言うための布石ではなく、「プログラムをこうすれば直りますよ」というアドバイスのためのものだったんですよ。
(もちろん、「私が責任もって直します」というものではありませんが^^;)
で、
「ダメな原因」を探るためには、その「プログラムの検証」が必要
なんですが、
「検証」するためには、「ダメと分かっている単語」が必要
なんですよ。
プログラムの方はダウンロードすれば済むわけですが、ダメな単語を1から探すのは大変だなぁと思ったわけです。
「消せばいいや」というつもりで、「何が悪いの?」と聞かれているだけならば、「同じ経験をし、見つけ出した人」しか答えられないのではないかと思います。
ただ、技術屋から言わせれば、「原因を知らずして、全てのBadWordを挙げるのは不可能」です。
それともう1つ。
>> これは ' のままで大丈夫です。
> あっ。ありがとうございます♪
> そうですかー。…ぢぁ、例えば
> 『s'e'x』←こんな単語を登録しても
> 大丈夫!ってことですよね。
この ' の話は、「単語」として登録する部分の話ではなく、
my $word=<<'WORD';
という「プログラム」の方の話です。(WORD を囲んでいる ' のこと)
単語登録の方で注意すべきことは、
・「WORD」というのを禁止ワードにできない
・ $ や @ (共に半角)を入れる場合、それぞれ \$、\@ と書かなければならない
事くらいだと思います。
後は何を書いても大丈夫なはずです。
>> 「プログラムをこうすれば直りますよ」という
>> アドバイスのためのものだったんですよ。
そうでしたか。申し訳ありませんでした!
でも私、プログラムは絶対に書き換えたくないのです(T-T)
( このことを質問文の方に補足しておくべきでしたね。)
書き換えようとしたら、いつも失敗しちゃうから。
・・・なんかでも、皆様からのご回答を読む限りでは
結局『使えない単語は無いはず』ってことみたいで。。。
じゃあ私が禁止ワードを書き変える際などに誤って
プログラムの一部を削除してしまったのかもしれないです。
(以前にもそういうことがあったから。)
もう1度DLするところからやり直してみたいと思います。
何度もありがとうございました。
そしてスミマセンでした。m(_ _)m
No.6
- 回答日時:
sun_supinel さん、ご指摘ありがとうございます。
> my $word=<<'WORD';
> とシングルクォーテーションでくくってるのでエスケープしなくても大丈夫では?
> $も@も問題なく使えそう。
そうですね。
普段、裸で使ってばかりなんで、すっかり忘れてました^^;
# 回答の種類に「お礼」が欲しいところです。
「お礼」が遅くなってしまい、
本当にごめんなさい☆(謝ってばっか(笑))
私なりにチョット落ち込んでしまって…
スグにレスしたら感情的になって
しまいそうな気もしたので、
少し時間を置くことにしたのです(^-^;)
お騒がせしました。。。
No.5
- 回答日時:
一点だけ、、、。
>$ や @ (共に半角)を入れる場合、
>それぞれ \$、\@ と書かなければならない
my $word=<<'WORD';
とシングルクォーテーションでくくってるのでエスケープしなくても大丈夫では?
$も@も問題なく使えそう。
でもどうすれば質問のような状況になるのか知りたいっす、、、。
ということで、原因となった(追加した)語句を教えてもらえないでしょうか?
ご回答ありがとうございました♪
>> 原因となった(追加した)語句を
>> 教えてもらえないでしょうか?
それが・・・全く分からないのです。
自分で探すのには、恐ろしく時間がかかってしまいそうで。。。
(だからここで質問させて頂くことにした)
怪しげな単語いっぱい使ってます。
…あ。今思い出しましたが、前に
全角のアンダーバーを登録した時は駄目だったような気がします。
その時は、「全てが禁止ワード扱いされる」っていうような
症状ではなく、CGIのページ自体がエラーで表示されなくなりました。
でも、アンダーバーを消したら直りました☆
あと、特殊記号も駄目ですよね??
今回の場合は、「なんか最近、禁止ワードじゃないのに、
禁止ワードになっちゃうことがあるな~」って気がしてきて、
でもあんまり気にせず、それからも時々登録を繰り返してたんです。
そしたら、だんだん禁止ワード扱いされる率が高く
なってって、
(その時には全然投稿できなくても、時間を置くと直ってたり。)
…で、気づいたら駄目になってました。
『今日イキナリ駄目になった!』っていうのだったら、
「原因は、あの単語かな?」って想像もつくのですが、
徐々になってったんで、もーー全然分からないのです。。。
協力できなくてごめんなさい。
そして、ありがとうございました!m(_ _)m
No.3
- 回答日時:
>>> これは ' のままで大丈夫です。
や、申し訳ない。
嘘ついてしまいました。
>つまり『使えない単語はプログラムによって
>マチマチだから、具体的に「この文字は駄目」
>とかは分からない(自分で地道に探すしかない)』
>…って解釈で宜しいのでしょうか。(謎)
ちょっと(大分?)違います。
>>> 禁止ワードの判定部分はどうなっているんですか?
>「禁止ワードの判定部分」って何ですか?
正規表現はご存知ですか?
$QUERY =~ /$word/
の部分です。
ここでマッチングを行う際に、文字コードを誤って判別してしまう単語が$wordに含まれているのでしょう。
#詳しくは
#http://www.din.or.jp/~ohzaki/perl.htm#JP_Match
上記URLのサンプルを元に作成した物ですが、
if($QUERY =~ /$word/){
の部分を、
$ascii = '[\x00-\x7F]';
$twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]';
$threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]';
if ($QUERY =~ /^(?:$ascii|$twoBytes|$threeBytes)*?(?:$word)/i) {
にしてみてはどうでしょう?
「SEX」「sEx」「sex」の3つに1度にマッチングさせることもできます。
#全角・半角の判別は、また別の方法になります。
他には$wordの中身を配列に格納してindex関数で1つずつ調べる…なんて方法もありますが、
大文字小文字の区別はつけられません。
どちらにせよ改造になりますから、もしかしたら配布もとのサポート対象外になってしまうかもしれませんので
ご自身の責任の元書き換えてみてください。
>ん~~~。す・すみません☆☆
>その手間を惜しんでの質問でした||(-_-;)|||
>『この質問のような内容って実は割と常識かな?
>ここで聞けば皆さんが教えてくださるかな?
>だったら、それが1番ラク。。。』って感じで。(汗;)
質問する者のマナーをもう少し学ばれた方が良いのでは…(^^;
参考URL:http://www.mirai.ne.jp/~mikeneko/yuibot/yuibot/f …,http://www.din.or.jp/~ohzaki/perl.htm#JP_Match
>> 正規表現はご存知ですか?
本当にごめんなさい。
全くの無知なのです。||(-_-;)|||
>> ご自身の責任の元書き換えてみてください。
壊れたら嫌だし、せっかく詳しく
教えて頂いたのに申し訳ないですが、
プログラムを書き換えることはせず
地道に探してみることとします。。。
>> 質問する者のマナーをもう少し学ばれた方が
仰る通りですね。
いろいろ複雑な問題だったとも知らず。
私はテッキリ、これはCGI界では常識で…
『○と○と○は使えませんよ♪』
みたいな答えがソッコーで返ってくる
ものとばかり考えておりましたので。
すみませんでした…m(_ _)m
No.2
- 回答日時:
> 沢山登録したら、…最近、何を書いても禁止ワード扱いされ
とのことですが、まずは「どの単語を入れるとまずいのか」を特定しましょう。
半分ずつ削って行けば、容易に特定できると思います。
また、悪さをしている単語は複数かもしれませんから、その辺にも注意されるとよいでしょう。
この手の問題は、「文字コード」と「マッチング(正規表現)」の問題であることが多いので、入れるとまずい単語を特定して、「この単語を入れると動作がおかしい」と言ってくれると、回答/アドバイスも付きやすいのではないかと思います。
ちなみに、No.1 の yuizuian さんの回答にある、
> my $word=<<'WORD';
> の場合クォーテーション(')
> は\'と書かないといけなかったと思います。
についてですが、これは ' のままで大丈夫です。
(逆に \' と書いてしまうとエラーになってしまいます。)
ご回答ありがとうございました☆
つまり『使えない単語はプログラムによって
マチマチだから、具体的に「この文字は駄目」
とかは分からない(自分で地道に探すしかない)』
…って解釈で宜しいのでしょうか。(謎)
>>「この単語を入れると動作がおかしい」
>> と言ってくれると、回答/アドバイス
>> も付きやすいのではないかと思います。
ん~~~。す・すみません☆☆
その手間を惜しんでの質問でした||(-_-;)|||
『この質問のような内容って実は割と常識かな?
ここで聞けば皆さんが教えてくださるかな?
だったら、それが1番ラク。。。』って感じで。(汗;)
それと「この単語を入れると動作がおかしい」
ってのを自分で調べた後だったら、その単語を
消せば正常に動くようになる…ってことだと思うので、
もう他には何も聞くことが無いです。。。
>> これは ' のままで大丈夫です。
あっ。ありがとうございます♪
そうですかー。…ぢぁ、例えば
『s'e'x』←こんな単語を登録しても
大丈夫!ってことですよね。
※↑こんな風に文字の間に記号とか入れてきたりするんです。
オカゲで…例えば「sex」って単語だけでも、
「SEX」「sex」「sEx」「SEX」「s○x」「S・E・X」等々、
50パターンくらい登録しておかなければ意味が無い。。。
(…というか、「SEX」って沢山書いてスミマセン。
これじゃ私が荒らしっぽいですね。(溜息))
No.1
- 回答日時:
my $word=<<'WORD';
の場合クォーテーション(')
は\'と書かないといけなかったと思います。
>登録する単語の数に制限は無いので、
>沢山登録したら、…最近、何を書いても
>禁止ワード扱いされ、投稿が出来なく
>なってしまいました~(^_^;)
禁止ワードに設定している文字がなくてもですか?
禁止ワードの判定部分はどうなっているんですか?
この回答への補足
↓こんな風になってました。
-------------
package cgiroomwcheck;
#発言禁止文字列 WORDまでなら何行でも追加OK
my $word=<<'WORD';
○○
△△
◇◇
WORD
#禁止ワード発言時の戻り先リンクURL
my $url = 'http://***/***/***.cgi';
#jcode.plまでのパス
my $require = './jcode.pl';
my($QUERY,@error);
if($ENV{'REQUEST_METHOD'} eq 'POST'){
binmode(STDIN);
read(STDIN,$QUERY,$ENV{'CONTENT_LENGTH'});
tie *main::STDIN, 'Scalar2handel',$QUERY;
}else{
$QUERY = $ENV{'QUERY_STRING'};
}
if($QUERY){
require $require;
$QUERY =~ tr/+/ /;
$QUERY =~ s/%(..)/pack('C', hex($1))/eg;
jcode::convert(\$QUERY,'euc');
jcode::convert(\$word ,'euc');
$word =~ s/[\r\n]+$//;
$word =~ s/([^\w\r\n])/\\$1/g;
$word =~ s/[\r\n]+/|/g;
if($QUERY =~ /$word/){
print <<HTML;
Content-type: text/html\n\n
<HTML><HEAD><META HTTP-EQUIV="Expires" CONTENT="0"></HEAD>
<BODY bgcolor="#FFFFFF" text="#FF0000">
<TABLE height="100%" width="100%"><TR><TD align=center><table alicn=center><tr><td align=center><tt>禁止コードが含まれている為、受理できません。<HR size=1><br><font size=5>[<a href="$url">戻る</a>]</font></TD></TR></TABLE></TD></TR></TABLE>system:<A href="http://cgiroom.nu" target=cgiroom>CGIROOM</A></BODY></HTML>
HTML
exit;
}
}
# ダミーSTDIN 2001/10/11
package Scalar2handel;
sub TIEHANDLE{
my $class = shift;
my $self = {
'scalar' => shift ,
'position' => 0 ,
};
$self->{'length'} = length($self->{'scalar'});
bless $self , $class;
}
sub READ {
my $self = shift;
my($undef,$len,$offset) = @_;
$offset += 0;
my $position = $self->{'position'};
$len < 0 && die "Negative length\n";
my $tmp = $position + $len;
$self->{'position'} = $tmp if $position >= $tmp ;
$_[0] = $offset > 0 ? " " x $offset : "";
$_[0] .= substr($self->{'scalar'},$position ,$len);
length($_[0])
}
sub READLINE {
my $self = shift;
my $position = $self->{'position'};
return undef if $self->EOF;
if(wantarray){
$self->{'position'} = $self->{'length'};
substr($self->{'scalar'},$position);
}else{
$self->{'position'} = index( $self->{'scalar'} , $/ , $self->{'position'} ) + 1;
$self->{'position'} = $self->{'length'} if $self->{'position'} == 0;
$.++;
substr( $self->{'scalar'} , $position , $self->{'position'} - $position );
}
}
sub GETC {
my $self = shift;
if($self->{'position'} + 1 <= $self->{'length'}){
substr($self->{'scalar'},$self->{'position'}++,1)
}
}
sub SEEK {
my( $self , $position , $whench ) = @_;
if($whench == 0){
if( $self->{'length'} >= $position ){
$self->{'position'} = $position
}else{
return 0
}
}elsif($whench == 1){
my $tmp = $self->{'position'} + $position;
if($tmp >= 0 && $tmp <= $self->{'length'}){
$self->{'position'} = $tmp
}else{
return 0
}
}elsif($whench == 2){
my $tmp = $self->{'length'} + $position;
if($tmp >= 0 && $tmp <= $self->{'length'}){
$self->{'position'} = $tmp
}else{
return 0
}
}else{
return 0
}
return 1
}
sub EOF { $_[0]->{'position'} == $_[0]->{'length'} ? 1 : 0 }
sub TELL { $_[0]->{'position'} }
sub BINMODE { 1 }
sub CLOSE{ $. = 0; }
sub WRITE { push(@error,"WRITE に対応しておりません\n") }
sub PRINT { push(@error,"PRINT に対応しておりません\n") }
sub PRINTF { push(@error,"PRINTF に対応しておりません\n") }
sub FILENO { push(@error,"FILENO に対応しておりません\n") }
END {
print "<div align=right><!--\n@error--><font size=1><a style='TEXT-DECORATION:NONE' href='http://cgiroom.nu'>Word checker v1.10</a></div>" if @error;
}
1;
-----------------
…長い。(汗;)
てか、これって、もしかしたら違反??
無断転載?とか著作権?とかの。。。
※駄目だったら消してください。>管理人さん
ご回答、ありがとうございます☆
>> 禁止ワードに設定している文字がなくてもですか?
はい。「設定してる文字が無くても」です!!(>_<)
…あ。「文字」というか、「単語」ですよね??
>> 禁止ワードの判定部分はどうなっているんですか?
う~~~。すみません。
「禁止ワードの判定部分」って何ですか?
何か分からないけど、『my $word=<<'WORD';』以外
の部分もココに貼り付けた方が良いでしょうか。
他にも何か思い出されましたら、
宜しくお願いしますぅ☆m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Word(ワード) 正の文字 4 2022/08/23 16:06
- その他(Microsoft Office) WordやExcelで英数字のみ半角または全角にしたい 6 2022/08/03 08:18
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Word(ワード) 表の縦罫線を移動するピッチ 1 2022/10/12 12:24
- Word(ワード) 大学の課題でWordをしないとダメでノートパソコンで無料期間を使ってワード使って作成しUSBに保存し 6 2022/05/12 13:14
- 文学・小説 富士見ノベル大賞とビーンズ文庫大賞に応募しようと思うのですが、その時は、賞の規定通りの文字数行数に設 1 2023/05/22 18:48
- Word(ワード) 写真3枚をA4に貼り付けたい 5 2023/07/03 14:36
- Word(ワード) パソコン内にあるwordファイルを探したいです。word内に、ある単語が利用されている(書かれている 1 2022/10/11 16:38
- 大学・短大 大学での論文の文字数に関しての質問です。 大学側で指示した条件は「12,000字以上書くこと」ですが 1 2023/01/11 00:31
- その他(ソフトウェア) 簡単な絵が描けるソフト(wordに挿入) 3 2022/05/20 22:16
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
apacheでPerl CGIが作動せず、5...
-
エクセルで集計したい。
-
(フリーの)ツリー掲示版CGI、...
-
cgi-binのエラー?
-
cgiからsendmailを送信で文字化け
-
フォームを再送信しますか?
-
/bin/awk '{print $5}'ってどう...
-
Trees掲示板CGI(CGI-Resque氏...
-
FFFTPでcgiファイルだけ反映さ...
-
CGI内でけいたいスマホの振り分け
-
cgi アクセス制限 エラー
-
ホームページでCGIのフォームを...
-
めちゃきれい
-
number 改行が追加できない
-
生成AI画像について
-
3DCG
-
ホームページにメールフォーム...
-
CGIの記述について教えてくださ...
-
CGIの設置が分かりません・・・
-
ホームページにCGIを設置したの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語でしりとりのプログラムを...
-
異なる文字列のマッチングを、D...
-
CGI.pmによるプルダウンメニ...
-
禁止ワードに設定できない文字
-
カウント配列
-
C言語 exitの使い方
-
エラーの意味は? Lvalue req...
-
VBAでダブルコーテーション入り...
-
フォームを開くときに、コンボ...
-
Excel-vba 文字列と変数を...
-
配列の値を置換するにはどうす...
-
VB6.0-整数と余りを求める
-
vbsでテキストファイル内の文字...
-
テキストボックスの値を変数に...
-
processing エラーで、 "cannot...
-
excelの、ある数式内の{}の意...
-
Variant型で宣言してるのにEmpt...
-
EXCEL/VBA 変数の値をクリップ...
-
数字の位ごとの値を表示するプ...
-
[VBS]変数を定数に変換する方法...
おすすめ情報