>>257さんへ

文字コードはちゃんと判別してると思います。(たまに?になるだけですので)
mbstring.substitute_character はnone,long,12307と変更してみましたが
やはり1文字で検索するとたまに?になってしまいます。