Mineaki Gotoh
gij****@peak*****
2002年 11月 24日 (日) 16:58:02 JST
たべにさん、こんにちは。後藤です。 >確認してみたのですが、URLのキーワード部分は >キーワード:スピード >keywords=%A5%B9%A5%D4%A1%BC%A5%C9& >このようになっていました。 >phpを再インストール(ビルド)ということになるんでしょうか その動作だとすると、--enable-mbstr-enc-trans は多分入ってますね。だか ら、再ビルドする必要はなさそうです。 詳しい状況が判らない上に、mbstr-enc-trans のソースを読んだわけではな いので、多分に憶測が混ざってしまうのですが、こんなことだろうと思いま す。 ・ php.ini の mbstring.detect_order において、SJISの方がEUCより優先順 位が高い。 ・「スピード」という文字列をEUCにしたもの(%A5%B9%A5%D4%A1%BC%A5%C9)は、 SJISの半角カナ文字列としても解釈可能である ・だから、SJISの文字列が入力されたものだと、mbstr-enc-trans が判断し て、EUCの半角カナ文字列にコンバートしてしまう ・結果、検索結果にヒットしない この予想が正しいかどうかを検証するのは比較的簡単で、 http://.../advanced_search_result.php?...&keywords=xxxxx&... となっていたら、 http://.../advanced_search_result.php?dummy=%BD%E0%C8%F7%C3%E6&...&keywords=xxxxx&... としたURLをブラウザに渡して見るのです。 それでちゃんと「スピード」として検索されたなら、私の推測が正しい可能 性が大です。 その場合の対策ですが、php.ini に、 mbstring.detect_order = ASCII,JIS,EUC-JP,SJIS,UTF-8 という一行を書き加える(もし、異なる設定のものが既に存在していたら、 そちらと置き換える)のが、比較的楽でしょう。 ただ、ブラウザによっては、SJISで記述されたHTMLフォームには、文字列を そのままSJISで渡すこともありそうなので、その場合、逆のパターンではま るかもしれません。 こういう「短い日本語文字列がGET変数で渡される」ようなスクリプトでは、 SJIS,EUCを誤解釈されないような文字列をダミーで渡してやるのが、PHP日本 語処理におけるスマートな解法だと思っています。 -- 株式会社PEAK ネットワーク技術担当 後藤 <gij****@peak*****>