Webアプリケーションで、画面遷移などパラメータの受け渡しを行う際には、
情報が正しく受け渡せるようURLエンコードを行います。
ASP.NETでURLエンコードを行うには、
下記の2つのメソッドが使用できます。
1.Server.UrlEncode
2.System.Web.HttpUtility.UrlEncode
どちらも引数にString型を指定でき、
違いがわかりにくいのですが、
Server.UrlEncodeを使うことをすすめます。
というのも、URLエンコードは、文字コードによって変換方法が違うのですが、
HttpUtility.UrlEncodeでは、Web.configに指定された文字コードに関わらず、
常に「UTF-8」でエンコードしてしまうからです。
例えば、Web.configに、以下の「Shift-JIS」が指定されていたとします。
<globalization requestEncoding="Shift-JIS" responseEncoding="Shift-JIS" responseHeaderEncoding="Shift-JIS"/>
その状態で、TEST1.aspxから、TEST2.aspxへ、パラメータを渡して画面遷移するとします。
渡す側
<TEST1.aspx>'コード1 Server.UrlEncode
Response.Redirect("TEST2.aspx?testparam=" & Server.UrlEncode("アイロベックステスト"))'コード2 HttpUtility.UrlEncode
Response.Redirect("TEST2.aspx?testparam=" & HttpUtility.UrlEncode("アイロベックステスト"))
受け取り側
<TEST2.aspx>'パラメータを出力
Response.Write(Request.Params("testparam"))
上記のコードの場合、「コード1 Server.UrlEncode」では問題なく画面表示されますが、
「コード2 HttpUtility.UrlEncode」では文字化けします。
(「UTF-8」でエンコードされているのを「Shift-JIS」で表示しようとするため)
この場合のように、そもそも「Shift-JIS」のシステムであれば、
すぐに文字化けに気づくので、まだ良いのですが、
「UTF-8」で作成した場合は、どちらでも正常に動作します。
そのため、文字コードを「UTF-8」から「Shift-JIS」に変更することになり、
Web.configを変更したときに初めて文字化けが発生することになります。
基本的に、Server.UrlEncodeを使用しておけば発生しない問題です。
HttpUtility.UrlEncodeは、引数に文字コードを指定できますので、
Web.configによらない文字コードを指定したい、特別な場合のみ使用すると良いでしょう。