ガラケー用のサイトを作ってて、ユーザーの入力文字とDBのデータを正規表現を使ってマッチするかの判定をしてたんだけど特定の文字だけうまくマッチしない。
入力に伸ばし棒(長音符)が入ってるとだめ。ラーメンとか。
なんでかわからなかったんだけど、どうやらShift_JISでの伸ばし棒のコードとASCIIでのコードがかぶってるようだ。
Shift_JIS 815B ASCII 5B
5Bのところがかぶってる。
他にもゼ、ゾがASCIIコードの一部と同じらしい。
5BはASCIIコードでは"["を表すので、
あ!検索パターンの文字列に正規表現の構文が入ってる!これはだめだ!ってことでうまく動かない。
回避策はpreg_quoteを使用するかstrposで文字の出現位置をみる
preg_match('/'.preg_quote('ラーメン','/').'/', $str) strpos($str,'ラーメン')
UTF-8に変換してからマッチするか調べてもいいけど、また出力前にShift_JISに変換しなきゃいけないので上記のどっちかがいいと思う。
といってもShift_JISによるSQLインジェクションの問題があるのでShift_JISで作るのはそもそもよくない。