WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:CGIでワード検索を作ったのですが...

0:[投稿] windows [URL] [2003/12/24 23:03 ][環境:IE6 UNIX,Apache]

度重なる投稿、誠に申し訳有りません。

タイトル通り、掲示板でのワード検索を作ったのですが、カタカナ
の語句で検索すると403エラーが帰ってきます。「ワード」で検索すると必ず帰ってきます。また、複数語句を指定すると、エラー
になる403エラーが帰ってきます。やはり、ソースのせいなのでしょうか?

自サイトにソースを書いたテキストをあげたので、CGIにお詳しい方、お時間あればチェック頂きたく思います。宜しくお願い致します。

また、テキストの中の<問題部分>で挟まれたソースを活かすと読み込みに時間がかかり動いたかと思うと、エラーが帰ってきます。
この部分は検索語彙に例えば「管理」と言う語句をスペースを空けて入力し検索すると、「管理」と言う語句を含む文章が重複して表示されないようにしたかった部分です。


1:[回答] 薫 [2003/12/25 09:33 ]

エラーが返るのは、恐らくsjisのせいでしょう。
http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
Shift-JISテキストを正しく扱う

重複要素を取り除く、超有名なtipsがあります。
http://www.din.or.jp/~ohzaki/perl.htm
配列から重複した要素を取り除く

各サイトを参考にしてみてください。


2:[保留] windows [2003/12/25 13:54 ]

薫さん、ありがとうございました!教えていただいた、配列の重複要素の処理のスクリプトを埋め込みましたら、思惑通りの結果を見出せました。ありがとうございます。

ただ、カタカナ語句の処理はまだ出来ません。これから、再度研究して見直しを図って見ます。


3:[質問] windows [2003/12/25 14:16 ]

再度、見直していたら、どうやら、「ワープロ」、「ワード」等の「ー」の部分が入っているとタブーになりました。
16進エンコードの数値を見てみると、「ー」は

%81%5B

でした。私のソースの中で、KENTさんのソースを見て真似をさせてもらった、全角スペースの変換

$value =~ s/\x81\x40/,/g;

と関連があるんだなとは思うんですが、これをどうやったら良いかと考え中です。


4:[回答] J [2003/12/25 15:12 ]

薫殿が指摘したサイト
http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
は熟読されましたか?(私はそんなにしてないけど・・・)
>unmatched [ ] in regexp
>「正規表現にマッチしない [ ] がある」
>例えば、/プール/ ではエラーが起こります。それは 'ー' の
>第二バイトが [ なので、/プール/ は /プ\x81[\x83\x8B/
> とみなされ、perlは文字クラスがあるのではないかと思います。
>しかし文字クラスの終了を示す ] が見つからないのでエラーになります。
と書いてあります。
よってsjisを他の文字コードにして処理するか、または上記サイト
をよく読まれて対策をしなければならないはずです。


5:[回答] AC [2003/12/25 20:50 ]

検索者の入力した文字をそのまま正規表現として使っているのが問題。
正規表現ではなく、index関数を使うべきでしょう。

for ($i=0; $i<@search; $i++){
 @tmp = grep((index $_, $search[$i]) >= 0, @log);
 push(@result, @tmp);    
}

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World