none
IE11にてリダイレクト時のURLに含まれるクエリ文字列が文字化けする RRS feed

  • 質問

  • ブラウザーをIE8からIE11(互換モード)に変更したのですが、サーバからリダイレクト処理を実施した際のURLに含まれるクエリ文字列が文字化けするようになってしまいました。下記クライアントサイド、サーバサイドの情報になります。

    [クライアント側]

    OS:Windows7、ブラウザ:IE11(互換モード設定、エンコーディングはシフトJISを選択)

    [サーバ側]

    OS:Windows Server 2003、Webサーバー:IIS6.0、言語:ASP(記述はvbscriptを使用、metaタグでのcharset指定はShift_JIS)

    Response.redirectの引数として「?error_msg=データが不正です」等のクエリ文字列を含むURLを指定してレスポンスを返しています。その後クライアントが指定されたURLでサーバへリクエストをするのですが、その際に上記の日本語部分が文字化けを起こしています。(IEのF12ボタンでのHTTP解析とIISのアクセスログから、このタイミングで文字化けが発生していることがわかりました。)いろいろと試し、Response.redirect時に対象の文字列をエンコーディングする事で一応の解決はしたのですが、なぜこれで解決したのかがいまいち理解できておりません。

    エンコーディングは2つの方法でやってみたのですが、どちらも結果的にはクエリ文字列の日本語を画面上に正しく表示させる事ができました。1つ目の方法は、shift-jisで符号化した文字列をそのままerror_msg=の後に書いてみました。(error_msg=%83f%81%5b%83%5e%82%aa%95s%90%b3%82%c5%82%b7)もう1つはescape関数を使用し、対象文字列をUnicode形式にしました。(URLのクエリ文字列部分は結果的にerror_msg=%uXXXX形式になります。)shift-jisとunicodeは異なる文字集合(文字符号化方式)だと認識しておりますが、なぜどちらでもうまくいくのかがわかりません。文字の符号化、複合化の観点において、IE11はリダイレクト時にURLをどのように処理しているのでしょうか。どなたか教えていただけると大変助かります。

    2015年7月26日 14:05

すべての返信

  • 実際にどのような要求がブラウザからサーバーへ出て行っているか Fiddler2 を使って調べてみてはいかがですか?

    具体的には以下の記事のようにして IE がリダイレクト先を要求に行く時クエリ文字列がどうなっているか HexView で表示して調べてみると何か分かるかもしれません。

    ブラウザによる URL のエンコーディング
    http://surferonwww.info/BlogEngine/post/2011/11/07/Encoding-of-URL-directly-written-in-address-bar-of-browser.aspx

    上の記事と同様なことが起こっているとするとクエリ文字列の「データが不正です」は Shift_JIS そのままのバイト列がサーバーに送信され、サーバーが受信した文字列を解釈できないのではないかと思われます。

    IE8 の時は問題なかったとすると、IE11 との違いは解せませんが、両方で送信されるクエリ文字列を調べてみてはいかがですか?

    結果が分かったら連絡いただけると幸いです。

    2015年7月26日 14:49
  • 【追伸】

    質問者さんの環境のクラシック ASP(ですよね?)は分かりませんが・・・

    ASP.NET でちょっと試してみましたが、上に書いたような問題はなかったです。

    自分の環境 Vista SP2 32-bit, IIS7, ASP.NET 4, Web サイトプロジェクトで、以下のコードでリダイレクトすると、

    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Redirect("default.aspx?error_msg=日本語");
    }

    応答ヘッダの Location には、以下のように、"日本語" の UTF-8 をパーセントエンコーディングした文字列をクエリ文字列として設定します。(上のコードのあるページが charset=utf-8 でも charset=shift_jis でも同じ)

    Location: /default.aspx?error_msg=%e6%97%a5%e6%9c%ac%e8%aa%9e

    ご参考まで。


    • 編集済み SurferOnWww 2015年7月27日 2:13 誤字訂正
    2015年7月27日 2:12