CGI-BBS > CGI > Perl > 特殊文字を検索


カレッヂ
カレッヂ


質問者 がん太  投稿日 6/4(月) 17:49:35
いつも勉強させていただいています。
教えてほしいのですが、いま検索エンジンにチャレンジしていおり、検索にはレスキューさんのフリーソフトのソースを利用しています。

if ($name =~ /^([\x00-\x7F]|[\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE]{2})*$name1/i) {;}

この部分で$name1が$nameとマッチするか判断しているのは理解できるのですが、$name1に半角記号 "(,),\,[,*,+" これらの記号を一文字入るとサーバーエラーを起こします。また、
"$,^,?"を一文字入れるとCSVファイルのデータすべてにヒットします。これらの記号にも対応した検索エンジンを作りたいと思っているのですが、

[\x00-\x7F]|[\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE]{2}

この部分でEUC-JP文字全てに対応させてあると思います。対応させるためにどうしたらよいか分かりません。どなたかご存知のかた教えてください。
回答者 しあわせのツボ  [削除]  投稿日 6/4(月) 19:59:58
前後が見えないので断言はできませんが…
マッチをかける前に
$name1 = quotemeta($name1);
とするとどうでしょう。
質問者 がん太  [削除]  投稿日 6/5(火) 14:18:43
しあわせのツボさん、ありがとうございます。
フォームからname1の値を取る時に
$name1 = quotemeta($name1);
しましたらうまくいきました。quotemetaという関数は私の参考書にも載ってなく、
ネットで確認しました。こんな便利な関数があるなんて、どうもありがとうございました。

このページは終了したので返信(回答)は書きこめません

Web裏技