パーセントエンコーディング

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

パーセントエンコーディング: percent-encoding)とは、URIにおいて使用できない文字を使う際に行われるエンコード(一種のエスケープ)の名称である。RFC3986のSection 2.1で定義されている。一般にURLエンコードとも称される。

URLエンコードと言う用語は上記のパーセントエンコーディングによる符号化と以下に記述するapplication/x-www-form-urlencodedによる符号化の2種類がある。半角スペースはパーセントエンコーディングでは「%20」に符号化されるが、application/x-www-form-urlencodedによる符号化では「+」に符号化される。

概要[編集]

URIの規則を定める RFC 3986 では、URIに、非予約文字[1]でもなく、また、URIの構文を示すために用いている予約文字[2]でもない文字を用いる場合には、その文字の代わりに「%xx」(xxは16進数)という形のコードを表記することが定められている。その際に、日本語の文字などで、どの符号化を用いるかは環境によって異なる。

マルチバイト文字はバイト単位で変換する。Shift_JISの2バイト目など、バイトが非予約文字に対応するなら、その文字をそのまま使用しても良い。

たとえば「ウィキペディア」を、各種の文字コードを用いてパーセントエンコーディングで符号化すると以下のようになる。

  • Shift_JIS - %83E%83B%83L%83y%83f%83B%83A
  • EUC-JP - %A5%A6%A5%A3%A5%AD%A5%DA%A5%C7%A5%A3%A5%A2
  • UTF-8 - %E3%82%A6%E3%82%A3%E3%82%AD%E3%83%9A%E3%83%87%E3%82%A3%E3%82%A2

application/x-www-form-urlencoded[編集]

HTTPPOSTメソッドでWebフォームの文字列を送信する場合に、文字列はエンコードして送信される。その際の符号化方法はMIMEContent-Typeがapplication/x-www-form-urlencodedで指定される。この符号化方法はRFC1866のSection-8.2.1で定義されている。この符号化方法をURLエンコードと言うことがある。

application/x-www-form-urlencodedでは、半角スペースASCIIコード 20)は「+」に変換される。このため、バイナリデータをBase64経由で直接POSTすることはできず、下記の手順でBase64Urlに変換してPOSTする必要がある。

  1. BASE64でテキスト化
  2. "+"を"-"に置換
  3. "/"を"_"に置換
  4. POSTでデータを送信
  5. "-"を"+"に置換
  6. "_"を"/"に置換
  7. BASE64でバイナリに戻す

また、複数のフォーム項目を送信する場合、各項目は「&」(アンパサンド)区切りで送信される。

脚注[編集]

  1. ^ RFC 3986 では、ASCIIのコード範囲内の英字(大文字・小文字)、数字、ハイフン “-”、ピリオド “.”、アンダースコア “_”、チルダ “~”が非予約文字 (Unreserved Characters) である。
  2. ^ RFC 3986 では、ASCIIのコード範囲内のコロン “:”、スラッシュ “/”、疑問符 “?”、シャープ “#”、角括弧 “[”、“]”、単価記号 “@”、感嘆符 “!”、ドル記号・ペソ記号 “$”、アンパサンド “&”、アポストロフィー・シングルクオート “'”、丸括弧 “(”、“)”、アスタリスク “*”、正符号・加算記号 “+”、コンマ “,”、セミコロン “;”、等号 “=”が予約文字 (Reserved Characters) である。

参考文献[編集]

関連項目[編集]