.NET TIPS 文字列をURLエンコードするには?デジタルアドバンテージ2004/10/01 |
|
|
文字列データをURLに埋め込むような場合には、Webサーバとの間で正しく情報をやりとりするために、その文字列を別の表記形式に変換する(エンコードする)必要がある。これは、文字列データが空白文字や一部の記号(「$」、「#」など)、全角文字などを含んでいると正しく送信されない可能性があるためである。
例えば、IEを使ってGoogleで、
".NET TIPS"
を検索したときには、検索結果の画面でのURL(IEの[アドレス]部分)が次のようになっているはずだ。
http://www.google.co.jp/search?hl=ja&ie=UTF-8&q=%22.NET+TIPS%22&lr=
このURLでは、検索文字列「".NET TIPS"」が「%22.NET+TIPS%22」にエンコードされている(「"」が「%22」に、半角スペースが「+」に変換されている。このようなURLのエンコードは特に「URLエンコード」と呼ばれる)。
この例ではIEが自動的にエンコードを行っているが、プログラムで同様のリクエストを送信する場合には、文字列データを自前でエンコードしなければならない。これには、HttpUtilityクラス(System.Web名前空間)のUrlEncodeメソッドを使用する。
HttpUtility.UrlEncodeメソッドによるURL文字列のエンコード
UrlEncodeメソッドは、パラメータとしてURL文字列を受け取り、URLエンコードされた文字列を返す静的メソッドであり、C#やVB.NETでは次のようにして利用できる。
encodedString = HttpUtility.UrlEncode(urlString)
このUrlEncodeメソッドによってエンコードされる文字は、下記以外の文字である。
「a〜z」「A〜Z」「0〜9」「'」「.」「-」「*」「)」「(」「_」
これらの文字は、エンコードが不要な文字である。これら以外の文字は、「%22」(「"」の場合)や「%e3%81%82」(「あ」の場合)*のように、その文字の文字コードを16進数文字列に変換し、2けたごとに「%」を付けた形式に変換される。ただし例外的に、半角スペースは「+」に変換される。
* 日本語の全角文字については、デフォルトでは、文字コード体系としてUTF-8が使用される。ほかの文字コード体系によりURLエンコードしたい場合には、第2パラメータにEncodingオブジェクトを指定するバージョンのUrlEncodeメソッドが利用できる(Encodingオブジェクトについては「TIPS:Encodingクラスで扱えるエンコーディング名は?」を参照)。 |
なお、UrlEncodingメソッドは、同じSystem.Web名前空間にあるHttpServerUtilityクラスにも用意されているが(ASP.NETのWebフォームからは、PageクラスのServerプロパティによりHttpServerUtilityクラスのインスタンスを利用可能)、その内部ではHttpUtility.UrlEncodeメソッドを利用している。
カテゴリ:クラス・ライブラリ 処理対象:文字列 カテゴリ:クラス・ライブラリ 処理対象:URL 使用ライブラリ:HttpUtilityクラス(System.Web名前空間) 使用ライブラリ:HttpServerUtilityクラス(System.Web名前空間) 関連TIPS:Encodingクラスで扱えるエンコーディング名は? |
|
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|