通販のページに検索フォームをつけました。
perlで製作していますが、複数語句を入力した時に、正規表現で|(パイプ)を使い
$s =~ /a|b|c/ とし a、b、cどれかにマッチするようにしていますが、
この時にフォームに正規表現で
アリミノ|トリートメント とか入力されるとそれぞれアリミノ、トリートメントに該当するのがリストアップされますが、これが
アリミノ | トリートメント とスペースも入力されると次の語句のマークアップでとんでも無いことがおきました。
借りているサーバーは共用ですから他の人の迷惑になりますのであちこちクグリましたが、
対応策が見つからず、
結局フォームからURIエンコードされてくるデータを分解時に
length(フォームデータ)<=3 で 3バイト以下を全部削除するようにして解決です。 sjisで書いていますから、 &jcode’convert(*look_up_and,’euc’)
一端eucに変換してマッチングと置換えは行い又、
sjisに戻して表示しています。
下記のサイトはすごくためになります。
Perlメモ
“$ascii = ‘[\x00-\x7F]’; $twoBytes = ‘[\x8E\xA1-\xFE][\xA1-\xFE]’; $threeBytes = ‘\x8F[\xA1-\xFE][\xA1-\xFE]’; if ($str =~ /^(?:$ascii|$twoBytes|$threeBytes)*?(?:$pattern)/) { print ‘マッチした\n’; }”