CGI-BBS > データベース > 簡易データベース > 簡易データベースの改造で半角の?を検索出来るようにしたい。


カレッヂ
カレッヂ


質問者 あっくん  投稿日 12/12(木) 17:47:59
簡易データベースの検索で半角?を入れるとデフォルトの設定でもエラーになるのですが
改造でURLの追加と検索のマッチ処理を入れてみたのですがエラーになるし
?を$value =~ s/\?//g;をsearch.cgiに入れても駄目ですよね。どのようにすれば検索できるか
どなたか、教授して下さい。
#URL(マッチ)

        if ($FORM{'URL'} ne '') {

        if ($URL =~ /$FORM{'URL'}/i) { ; } else { next; }
        } 
これだとよく、URLである***.asp?=1234と?が入ると検索できないみたいです。

プロバイダ参照:
サーバのOS:UNIXサーバ
パソコンのOS:WinNT系
エディタ:
FTPソフト:
サーバ移転:していない
改造:している 改造前正常動作
CGI習熟度:middle

回答者 しあわせのツボ  [削除]  投稿日 12/16(月) 14:05:04
?だけでよいなら
$FORM{'URL'} =~ tr/\?/\\\?/;
でどうでしょう。
回答者 とほほ  [削除]  投稿日 2004/12/14(火) 23:45:59
こんにちは、初めまして とほほ と申します。こちらで質問するのは初めてです。礼を
失してましたらご勘弁ください。先ほど間違えてしあわせのツボ様にメールを送ってし
まったようです、こちらに投稿するつもりでしたすみませんm(__)m

> ?だけでよいなら
> $FORM{'URL'} =~ tr/\?/\\\?/;
> でどうでしょう。

これがどうも出来ません(^^;
色々試してみたのですが検索しません、デフォルトの状態で入力フォームに直接[ \? ]
と入力して検索するときちんとヒットしますので何とかしたいのですが、、、。

---
$FORM{'URL'} =~ tr/\?/\\\?/;
if ($FORM{'URL'} ne '') {
if ($URL =~ /^([\x00-\x7F]|[\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-
                  \xFE]{2})*$FORM{'URL'}/i) { ; } else { next; }
}
---
これではだめなのでしょうか?
他にも色々試してみたのですがやはりヒットしません、デフォルトの簡易データベース
で実際にどのように $FORM{'URL'} =~ tr/\?/\\\?/; を使ったらよいのか教えていただ
けませんでしょうかm(__)m

環境
自宅サーバー
OS WindowsXPSP2
サーバー httpd
perl ActivePerl5-5.8.0.806

回答者 しあわせのツボ  [削除]  投稿日 2004/12/15(水) 13:08:59
検証しながら書いてる訳ではないので、すみません。
案外、\\\?でなく\\?だった、というオチも結構あったりして…。

ところで、検索できないのは?だけですか? 他のメタ文字(+とか[とか)はどうですか?
デフォルトの状態でエラーが出るなら、quotemetaをかけるのが手っ取り早いかもしれません。
回答者 とほほ  [削除]  投稿日 2004/12/16(木) 01:02:30
さっそくご回答いただきありがとうございます、大変感謝しております。

> 検証しながら書いてる訳ではないので、すみません。
> 案外、\\\?でなく\\?だった、というオチも結構あったりして…。

これは試してみましたがだめでした(^^;

> ところで、検索できないのは?だけですか? 他のメタ文字(+とか[とか)はどう
> ですか?
> デフォルトの状態でエラーが出るなら、quotemetaをかけるのが手っ取り早いかも
> しれません。

とりあえず、+と?はだめでした。(メタ文字にどういう種類があったのか覚えていな
いのですみません(^^; )
それからデフォルトの状態では確かにエラーになりますが、私の改造版ではえらーで
はなく「ご指定の条件では見当たりませんでした」となるのです。

でもしかも今私の改造簡易データベースで試してみたら ? だけを検索するとヒット
するのです(T_T)
私もデータベースにあるURLでパラメーター付きのURL(http://xxx/xxx.cgi?xx=xx等)
をヒットさせたいのですがこれがヒットしません。入力欄でこのURLの?の前に\をつ
けるとヒットするのですが、、、、。

quotemeta ですね、さっそくネットを検索して意味を調べて利用してみます(^^ゞ
どうもありがとうございましたm(__)m

返信(回答)する


Web裏技