- PR -

ポストバックイベント前後でHTTPクエリ文字列が変わってしまう

投稿者投稿内容
tomo
会議室デビュー日: 2007/01/17
投稿数: 3
投稿日時: 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 ]
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-01-18 13:52
web.config の globalization はどうなっていますか?
_________________
かるあ のメモスニペット
tomo
会議室デビュー日: 2007/01/17
投稿数: 3
投稿日時: 2007-01-18 14:01
requestEncoding、responseEncoding共にutf-8を指定しております。

<globalization requestEncoding="utf-8" responseEncoding="utf-8"/>
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-01-18 15:02
あれ、僕の方でも確かにそうなりますね globalization は関係ないのかな。。。
HttpUtility.UrlEncodeUnicode() をつかってみてはどうでしょうか
_________________
かるあ のメモスニペット
tomo
会議室デビュー日: 2007/01/17
投稿数: 3
投稿日時: 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タグを見て。もしかしたら・・・と思ったのですが。
推測で申し訳ないです。
Hilda
常連さん
会議室デビュー日: 2006/02/12
投稿数: 37
投稿日時: 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に変更しない方法をとりたいと考えております。
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-08-14 13:01
引用:

Hildaさんの書き込み (2007-08-14 10:57) より:
強制的にutf-8固定にする方法はありませんでしょうか。



以前調べましたが、
まともな方法では無理っぽいです。

Formのaction属性はPage.ClientQueryStringから作成されますが、
これがUTF-16なので。

クエリ文字列はRequest.QueryStringからデコード済みのものを取れ、
ということなんでしょう。きっと。

UTF-16の文字をエンコードしておけば他の文字コードと間違えないし、
全ての文字を包含しますので、
デコード時に文字化けを防げるという配慮なのだろうと思いますが、
固定は…不便。


[ メッセージ編集済み 編集者: れい 編集日時 2007-08-14 13:05 ]
未記入
常連さん
会議室デビュー日: 2007/02/21
投稿数: 29
投稿日時: 2007-08-14 13:55
...なんでもない。忘れて

[ メッセージ編集済み 編集者: 未記入 編集日時 2007-08-14 16:43 ]

スキルアップ/キャリアアップ(JOB@IT)