#?SuikaWiki/0.9 - [1] [CODE(ABNF)[[DFN[path]] = [[fsegment]] *( "/" [[segment]] ) ;; [[RFC1808]]]] - [2] [CODE(ABNF)[[DFN[fsegment]] := 1*[[pchar]]]], [CODE(ABNF)[[DFN[segment]] := *pchar]] です。最初の部分が必ず1文字ないといけないのは、空を許すとすると [CODE(ABNF)[[[abs_path]]]] で [SAMP(URI)[//foo]] のようなものが認められることなり、 [CODE(ABNF)[[[net_path]]]] と区別できなくなってしまうからでしょう。 - [3] [[RFC2396]] では、 [CODE[]] は [CODE(ABNF)[[[abs_path]]]] 又は [CODE(ABNF)[[[opaque_part]]]] のことを指します。これらは排他的なので曖昧なく区別できます。 (RFC 2396 3.) - [4] RFC 1808 の [CODE(ABNF)[path]] は、 2396 では [CODE(ABNF)[[[path_segments]]]] に当たります。 - [5] [CODE(ABNF)[[DFN[path]] := [ abs_path / opaque_part ] ;; RFC 2396]] - [6] 2396 によれば、 path segment では [CODE(regex)[ [/;=?] ]] が[[予約]]されています。 [CODE(URI)[=]] は[[引数]]で使われるのですが、最初の引数のセミコロンより前では意味を持たないはずです。それでも予約されています。あ、よくみると、引数でも [CODE(URI)[=]] は定義されていませんね。つまり、引数だろうがなかろうが、経路 segment 内では [CODE(URI)[=]] と [CODE(URI)[%3D]] は必ずしも等価ではなく、うかつに (un)escape してはいけないということです。