文字列のパターン検索におけるバグ

[上に] [前に] [次に]
miyu [E-Mail] 2000/02/10(木) 21:46:06
Perlを使ったCGIプログラムで,あるデータベースファイルにある
文字列を検索するプログラムを書いています.検索キーワードを
指定すると,該当する文字列を表示し,その文字を赤太字に強調します.

プログラムができて,動作確認のため「1(全角)」をキーワードに
指定すると,太字部分が文字化けしてしまいました.調べてみると,
それは「撮影」という文字で,さらに句点コードを調べてみると,

1:0317
撮:2703
影:1738

ということで,撮影27[0317]38というパターンで「1」と認識
するようです.これを回避するにはどうしたらよいのでしょうか?

ちなみに,プログラムはShift-JISでかいていますが,文字列の
入る変数は,jcode.plでEUCコードに変換しています.
具体的には,

$key を検索キーワード,$logをファイルから読み出した文字列とすると,
(あらかじめ&jcode'convert( *k, 'euc' );で変換済み

if( $logs =~ m#$key# ){        #検索文字列が含まれていたら
     $logs =~ s/$key/<FONT COLOR=\"FF0000\"><B>$key<\/B><\/FONT>/g;
}
のようにしています.そのあと,CGIとして出力する際には,
Shift-JISコードに変換しています.

miyu 2000/02/10(木) 21:50:26
訂正です.
>$key を検索キーワード,$logをファイルから読み出した文字列とすると,
>(あらかじめ&jcode'convert( *k, 'euc' );で変換済み
>
>if( $logs =~ m#$key# ){        #検索文字列が含まれていたら
>     $logs =~ s/$key/<FONT COLOR=\"FF0000\"><B>$key<\/B><\/FONT>/g;
>}
部分は,

$key を検索キーワード,$logsをファイルから読み出した文字列とすると,
(あらかじめ&jcode'convert( *key, 'euc' );で変換済み

if( $logs =~ m#$key# ){        #検索文字列が含まれていたら
     $logs =~ s/$key/<FONT COLOR=\"FF0000\"><B>$key<\/B><\/FONT>/g;
}

ふじ 2000/02/10(木) 21:54:00
「正しくパターンマッチさせる」
http://www.din.or.jp/~ohzaki/perl.htm#JP_Match

こちらをどうぞ。

B-Cus 2000/02/10(木) 21:54:14
http://www.din.or.jp/~ohzaki/perl.htm#JP_Match

miyu 2000/02/10(木) 22:18:02
訂正です.
>$key を検索キーワード,$logをファイルから読み出した文字列とすると,
>(あらかじめ&jcode'convert( *k, 'euc' );で変換済み
>
>if( $logs =~ m#$key# ){        #検索文字列が含まれていたら
>     $logs =~ s/$key/<FONT COLOR=\"FF0000\"><B>$key<\/B><\/FONT>/g;
>}
部分は,

$key を検索キーワード,$logsをファイルから読み出した文字列とすると,
(あらかじめ&jcode'convert( *key, 'euc' );で変換済み

if( $logs =~ m#$key# ){        #検索文字列が含まれていたら
     $logs =~ s/$key/<FONT COLOR=\"FF0000\"><B>$key<\/B><\/FONT>/g;
}

miyu [E-Mail] 2000/02/10(木) 22:20:18
[[解決]]
ふじさん,B-Cusさん,どうもありがとうございました.
おかげさまで,動作することができました.
お二方ともご紹介くださったページには,他にも
有用な記述が豊富だったので,さっそくBookmarkにいれました.

[上に] [前に] [次に]