[Tep-j-general] 日本語の検索ができません

Back to archive index

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*****>




Tep-j-general メーリングリストの案内
Back to archive index