コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

URIでパーセントエンコーディングが推奨されない文字を整理する

原理を知っていれば納得な話なんですが、仕様に基づいた整理。

出典

RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax

どういうことか

RFC3986では予約文字(Reserved Character)と非予約文字(Unreserved Character)という表現で利用できる文字が定義されている。

非予約文字は「利用可能な文字」を表すもので、対象としては以下の文字が定義されている。

unreserved  = ALPHA / DIGIT / "-" / "." / "_" / "~"
  • ALPHA(アルファベットA-Z,a-z)
  • DIGIT(数字0-9)
  • -(ハイフン)
  • .(コロン)
  • _(アンダーバー)
  • ~(波線)

これらの文字はそのまま利用可能な文字なので、逆に考えるとこの文字はパーセントエンコーディングするべきではない文字ということになる。

ただ、エンコーディングを完全にしてはいけないというわけではなく、ちゃんと意味が通るようにエンコーディングされていればよい。

たとえば A0あ0という文字列をURLエンコーディングさせたい場合は、通常は

A0%E3%81%820

となるが、0を %30エンコードして

A0%E3%81%82%30

としても問題はない。

関連リンク