Firefox 3 のロケーションバーにマルチバイト文字を入力して、サイトにアクセスすると正しく URL が渡らない。検索エンジンなどで使用すると、一部の検索エンジンで入力した文字列が正しくサイト側に伝わらず文字化けしてしまうという問題が…('A`)
ロケーションバーを見ると、何やら URL がエンコードされている様です…この件で検索してみると、やっぱり同じような問題が見つかりました。about:config の network.standard-url.encode-query-utf8 の値を true に変更する事で問題が解決しました
user_pref("network.standard-url.encode-query-utf8", true);
ところが、この問題は半分解決したといった方がいいでしょう。何故なら、この設定はサイト側の URL エンコード処理が UTF-8 の場合しか効果がありません。例えば 緑のgoo に以下の様に文字列を渡してやると、やはり文字化けします 1
http://green.search.goo.ne.jp/search?MT=漢字入力ですよ
入力エンコード指定の URL パラメーターにて、以下の様にエンコードを指定してやれば 緑のgoo に関しては、解決です
http://green.search.goo.ne.jp/search?MT=漢字入力ですよ&IE=UTF-8
サイト側でこの問題を解決する方法もあります。URL パラメーターとして入力された文字列をサイト側で処理すべき文字エンコードに変換してやればいいのです。以下の例は PHP の例です 2
- foreach ( $_GET as $key => $value ) {
- echo '1 key: ' . $key . ' value: ' . $value . "<br />\n";
- echo '2 key: ' . mb_convert_encoding( $key, 'UTF-8', 'UTF-8,SJIS,EUC-JP' ) . ' value: ' . mb_convert_encoding( $value, 'UTF-8', 'UTF-8,SJIS,EUC-JP' ) . "<br />\n";
- }
他の UA でも試してみましたが、Opear, IE6 は駄目でした。特に Opera 3 は酷く、ロケーションバーにマルチバイト文字を入力してエンターキーを押すと URL エンコードどころか、激しく文字化けし、4 しかもその文字化けしたデータをそのまま URL としてサイトにアクセスします。なので、サイト側で解決しても駄目です
どうも、この問題は思っていたほど根が深いようです。時間がある時に調べてみたいと思います