- - PR -
ポストバックイベント前後でHTTPクエリ文字列が変わってしまう
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-01-17 18:58
初めて投稿させていただきます。
よろしくお願いいたします。 現在、 ASP.NET2.0(C#) IIS6.0 で開発を行っております。 HTTPクエリ文字列(utf-8にエンコード)を持つURLであるページにアクセスします。 その後、そのページ上のボタンをクリックすることによって ポストバックイベントを起こします。 そうすると、最初に指定してあったHTTPクエリ文字列が変わってしまい、 困っております。 具体的に申し上げますと、 「あいうえお」という文字列をHTTPクエリ文字列によって送るとします。 「あいうえお」は、utf-8でエンコードしますと 「%e3%81%82%e3%81%84%e3%81%86%e3%81%88%e3%81%8a」です。 http://xxx/test.aspx?key=%e3%81%82%e3%81%84%e3%81%86%e3%81%88%e3%81%8a その後ボタンをクリックします。 そうすると、URLは、 http://xxx/test.aspx?key=%u3042%u3044%u3046%u3048%u304a と変化してしまいます。 変化した「%u3042%u3044%u3046%u3048%u304a」ですが、 Unicode(UTF-16)だと思われます。 http://xxx/test.aspx?key=%e3%81%82%e3%81%84%e3%81%86%e3%81%88%e3%81%8a に最初にアクセスした段階で、ソース表示をしてみますと、 <form name="form1" method="post" action="Default.aspx?name=%u3042%u3044%u3046%u3048%u304a" id="form1"> となっておりますので、ロード時にはUnicodeに変更されているようです。 ポストバックイベント前後後でURLが変わらないようにする方法はありますでしょうか? ポストバックイベントの前後で、URLが変わってしまうと都合が悪いため、 申し訳ないのですが、お知恵をお貸しください。 よろしくお願いいたします。 [ メッセージ編集済み 編集者: tomo 編集日時 2007-01-17 19:13 ] | ||||
|
投稿日時: 2007-01-18 13:52
web.config の globalization はどうなっていますか?
_________________ かるあ のメモ と スニペット | ||||
|
投稿日時: 2007-01-18 14:01
requestEncoding、responseEncoding共にutf-8を指定しております。
<globalization requestEncoding="utf-8" responseEncoding="utf-8"/> | ||||
|
投稿日時: 2007-01-18 15:02
あれ、僕の方でも確かにそうなりますね globalization は関係ないのかな。。。
HttpUtility.UrlEncodeUnicode() をつかってみてはどうでしょうか _________________ かるあ のメモ と スニペット | ||||
|
投稿日時: 2007-01-18 15:30
返信ありがとうございます。
HttpUtility.UrlEncodeUnicode()で、エンコードしたものを 最初からHTTPクエリストリングに使用するという意味でしょうか? UrlEncodeUnicodeでエンコードすると、Unicode(utf-16)で エンコードされますよね? これですと、ポストバックイベント前後でも確かにURLの変化は なくなります・・・。 utf-8でエンコードしたHTTPクエリストリングは、ポストバックイベント後に Unicode(utf-16)になってしまう現象は避けられないのでしょうか・・・。 ASP.Netの内部はUnicodeで処理しているのでしょうか・・・。 ASP.Netからhtmlコードに変換する時にUnicodeで変換されている・・・ なんてことは考えられませんか? formタグを見て。もしかしたら・・・と思ったのですが。 推測で申し訳ないです。 | ||||
|
投稿日時: 2007-08-14 10:57
私も現在まったく同じ状況で困っています。
Machine.configなどもすべてutf-8に設定していますが、utf-16に変換されてしまいます。 強制的にutf-8固定にする方法はありませんでしょうか。 #ASP.NET 1.4から以降したソースで、すべてutf-8でコーディング、評価済のものをASP.NET 2.0に移行したものなので、できるだけいまからuft-16に変更しない方法をとりたいと考えております。 | ||||
|
投稿日時: 2007-08-14 13:01
以前調べましたが、 まともな方法では無理っぽいです。 Formのaction属性はPage.ClientQueryStringから作成されますが、 これがUTF-16なので。 クエリ文字列はRequest.QueryStringからデコード済みのものを取れ、 ということなんでしょう。きっと。 UTF-16の文字をエンコードしておけば他の文字コードと間違えないし、 全ての文字を包含しますので、 デコード時に文字化けを防げるという配慮なのだろうと思いますが、 固定は…不便。 [ メッセージ編集済み 編集者: れい 編集日時 2007-08-14 13:05 ] | ||||
|
投稿日時: 2007-08-14 13:55
...なんでもない。忘れて[ メッセージ編集済み 編集者: 未記入 編集日時 2007-08-14 16:43 ] |