2013-08-13 17 views
17

IE10のアドレスバーにパラメータを指定してWebサービスのクエリ文字列を入力してサービス結果を取得することができるように、顧客からリクエストがありました。 ?の後に行くすべての非ANSI文字 - それはIE10は、他の(通常の)ブラウザとは異なり、クエリ文字列パラメータをエンコードしませんように私には見えますIE10のクエリ文字列パラメータのエンコード

http://mywebsite.com/service.asmx/foo?param1=123&param2=מחרוזתבעברית 

:パラメータは次のようにヘブライ語の文字列を含み、マークは '3f'バイトに変換されますが、それは先に進むものをエンコードしますか? mark - URLそのもの例えば

、私は

http://www.shlomo.co.il/pageshe/sales/רכב-למכירה.asp?param=פאראם 

(パラメータが想像され、URLではない、と私はサイトと接続されていません)URLにアクセスしようと、私はに送信バイトのためのwiresharkで見ればサーバは、それはあなたがそれをURLエンコード文字列をURLのヘブライ語の一部を置き換えていますが、「3階のある?????とヘブライ語のパラメータを、代用見ることができる私に

wireshark output

を示しています。

Chromeで同じ文字列はそれで全部だエンコードされます:

GET http://www.shlomo.co.il/pageshe/sales/%D7%A8%D7%9B%D7%91-%D7%9C%D7%9E%D7%9B%D7%99%D7%A8%D7%94.asp?param=%D7%A4%D7%90%D7%A8%D7%90%D7%9D HTTP/1.1 

私はwin7の/ IE10とwinXPheb/IE8を持つマシン上でそれを試してみました。

私のIEの設定(特にそれが助け、再起動かどうかを確認するために、「常にエンコードされたアドレスオプションを表示」が、差は行われませんチェック)されています

enter image description here

私はすべての情報のために周りに検索してみました問題については知っていましたが、それほど多くは見つかりませんでした。

私の質問は以下のとおりです。

  • が、それはこのように確かに、または私は何かが足りないのですか?
  • この動作はどこに文書化されていますか?
  • IE/Winにパラメータエンコードを有効にする設定がありますか?

p.s.クライアント/ Web UIを開発していたのですが、私は単にクエリをurlencodeしますが、顧客からの私の要求はIEのアドレスバーにクエリを貼り付けることだけだったので、この特定の動作に興味があります。

ありがとうございました。

答えて

18

はい、行動の観察は正確です。 Internet Explorer 10以降は、URLをエンコードするための複雑なアルゴリズムに従います。これはInternet Explorer 11で更新されたとされていましたが、新しいオプションdoesn't seem to workが見つかりました。

「常にエンコードされたアドレスを表示する」オプションは、IDNホスト名に対してPunyCodeが表示されているかどうかに関係し、クエリ文字列には影響しません。 Send UTF-8 URLsは、ほとんどの場合、パスのエンコーディングに適用されますが、他のコードパスにも影響する可能性があります。

動作は完全に文書化されていません。私はIEInternalsのブログに完全な投稿を書くつもりだったが、そうする前にMicrosoftから移っていった。 this blog postに部分的な説明があります。

はい、動作に影響する設定があります。 [ツール]> [インターネットオプション]> [詳細設定]内のSend UTF-8 URLsチェックボックスは、URLの送信方法を決定する変数の1つですが、暗黙のうちにそのオプションを盲目的に実行しません(UTF-関連する他の変数は以下のとおりです。URLは、([スタート]> [ファイル名を指定して実行対例えばアドレスバーなど)を入力した

  1. システムのANSIコードページとは何
  2. (例えばロケールOSがデフォルトとして使用するもの)
  3. これらの変数の結果として、ブラウザ

で現在ロードされているページの文字セットは、Internet Explorerで正しくエンコードされない確実使用のURL(例えば%でエスケープUTF8)することはできません。

+0

はそれに応じて質問を編集します。 – alex440

+0

私はブラウザスタックのIE 10を試してみましたが、 "UTF-8 URLを送信"をチェックして問題を解決したようですが、ここでは大きな質問と回答をしました。それが正しいことを今思うのだろうか? –

5

残念ながら、これは私はあなたが、残念ながら、Webサーバーを変更することはできませんことがわかりました(win7の-x64の、11.0.9600.17358を構築)のInternet Explorer 11のためにまだ

真です。しかし、新しいサービスを開発している人は、リクエストパラメータをパス変数に変更することを検討するかもしれない。 http://myserver.com/pageから?τεστhttp://myserver.com /τεστ/