なぜ「%20」がURLのスペースとして使用されるのか、特になぜ%20が使用されたのか、そもそもなぜそれが必要なのかを知りたいと思います。
3 に答える
これはパーセントエンコーディングと呼ばれます。一部の文字はURIに含めることができないため(たとえば#
、URLフラグメントを示すため)、次のような文字で表されます(#
になります%23
) 。
同じ記事からの抜粋です。
予約セットの文字(「予約文字」)が特定のコンテキストで特別な意味(「予約目的」)を持ち、URIスキームがその文字を他の目的に使用する必要があると言っている場合、その文字はパーセントエンコードする必要があります。 予約文字をパーセントエンコードするには、文字をASCIIの対応するバイト値に変換し、その値を16進数のペアとして表す必要があります。エスケープ文字として使用されるパーセント記号( "%")が前に付いた数字は、予約文字の代わりにURIで使用されます。(非ASCII文字の場合、通常はUTF-8でバイトシーケンスに変換され、各バイト値は上記のように表されます。)
スペース文字の文字コードは32
次のとおりです。
> ' '.charCodeAt(0)
32
これは20
ベース16にあります:
> ' '.charCodeAt(0).toString(16)
"20"
その前にパーセント記号を付けると、が得られ%20
ます。
URLには、特殊なパス区切り文字であるなどの厳密な構文規則があるため/
、URLでスペースを使用することはできず、すべての文字はASCIIの特定のサブセットである必要があります。これらの制限に関係なく、URLに任意の文字を埋め込むために、バイトをパーセントエンコードすることができます。バイトx20
はASCIIエンコーディング(および他のほとんどのエンコーディング)のスペースを表すため%20
、URLエンコードされたバージョンです。
パーセントエンコーディングを使用します。URI(Uniform Resource Identifier)のRFCのパーセントエンコーディングの部分を見ることができます:一般的な構文
パーセントエンコードメカニズムは、コンポーネント内のデータオクテットを表すために使用されます。そのオクテットの対応する文字が
許可されたセットの外にあるか、コンポーネントの区切り文字として、または
コンポーネント内で使用されている場合です。パーセントエンコードされたオクテットは、文字
トリプレットとしてエンコードされます。これは、パーセント文字「%」と、それに続く
そのオクテットの数値を表す2桁の16進数で構成されます。たとえば
、「%20」はバイナリオクテット
「00100000」(ABNF:%x20)のパーセントエンコードであり、US-ASCIIではスペース
文字(SP)に対応します。