こっそり入れたZenCart。
ちょこちょこカスタマイズしてアフィリエイトで使えるようになった。
100個ぐらい商品を登録したところで、何気なく検索フォームから商品検索してみたら・・・
・・・・・・・
なにをっ!!
商品検索できなきゃ困るじゃん。
いちいちカテゴリからたどれというのか!?
あわてて調べてみたところ、
1)ソースにキーワードを直書き -> 問題なく結果が返ってきた
2)phpMyAdminで検索クエリを発行 -> 問題なし
3)ブラウザのアドレスバーの「keyword=xxx」に直接キーワードを書き込む -> 問題なし
・・・・・・ワケわからん。
どうやら検索フォームからの検索だけヒットしないらしい。
そこで、ソースの中でキーワードが渡ったところ(include/modules/pages/advanced_search_result/header_php.phpの中の$_GET['keyword']が出てきたところ)にmb_detect_encoding()をかけてみると、なぜか「UTF-8」と出た。
EUC-JPで送ってるはずなのに・・・
「php get 文字 コード」でググると、XOOPS Wikiの「HELP/文字化け」にたどり着いた。
その中の「mod_encodingを入れてる場合、GETで2バイトコードを渡すと文字化けする」によると、
WebDAV環境を構築する際に日本語ファイル名の解決のためにmod_encodingモジュールを入れるのですが、
このモジュールはURL文字列をシフトJISコードとして認識し、UTF-8に変換してApacheに渡します。
この時GETで渡されたパラメーター(URL中の?以降の文字列)も同じ方式で変換してしまう為に、文字化けが発生してしまうようです。これ、通常の表示やPOSTでは文字化けが発生しませんので、かなり悩みます(^^;
HELP/文字化け
らしい。
そういえばウチにもWebDAV入れてたな。と思い、phpinfo()で確認すると、やっぱり「Loaded Modules」に「mod_encoding」が。
もう、忘れちゃったよ。WebDAVの設定なんて・・・
仕方ないので今度は「mod_encoding 設定」でgoogle。
で、たどり着いたNamazuのMLの過去ログ。
今度はNamazuかよ・・・(^-^;;
それによると、
mod_encoding の設定で、EncodingEngine on とすると、HTTPリクエストヘッダ中に
現れるすべての文字列をURIアンエスケープして、さらに文字コードをサーバ側の
エンコーディングに変換してしまうといった副作用があります。mod_encoding の
ソースコードを読む限り、これは仕様のようです。
Re: Netscape + Apache 日本語で検索できない?
とのこと。
さらに、
この現象を回避するには、現状の httpd.conf を<IfModule mod_encoding.c>
EncodingEngine On
SetServerEncoding UTF-8
AddClientEncoding "Mozilla/5" JA-AUTO-SJIS-MS
</IfModule>
↓ 以下のように書き換えて、<IfModule mod_encoding.c>
<Location /DAV>
EncodingEngine On
SetServerEncoding UTF-8
AddClientEncoding "Mozilla/5" JA-AUTO-SJIS-MS
</Location>
</IfModule>EncodingEngine を On にするディレクトリに制限をかければ
(この例では /DAV 以下のみ) 大丈夫なはずです。
Re: Netscape + Apache 日本語で検索できない?
なるほど。
そんな設定もできるんですな。
早速設定を書き換えると見事、検索できるようになりましたとさ。
あー疲れた。
これだけで5?6時間費やしてしまった。

コメントする