41

なぜ「%20」がURLのスペースとして使用されるのか、特になぜ%20が使用されたのか、そもそもなぜそれが必要なのかを知りたいと思います。

4

3 に答える 3

59

これはパーセントエンコーディングと呼ばれます。一部の文字はURIに含めることができないため(たとえば#、URLフラグメントを示すため)、次のような文字で表されます(#になります%23) 。

同じ記事からの抜粋です。

予約セットの文字(「予約文字」)が特定のコンテキストで特別な意味(「予約目的」)を持ち、URIスキームがその文字を他の目的に使用する必要があると言っている場合、その文字はパーセントエンコードする必要があります。 予約文字をパーセントエンコードするには、文字をASCIIの対応するバイト値に変換し、その値を16進数のペアとして表す必要があります。エスケープ文字として使用されるパーセント記号( "%")が前に付いた数字は、予約文字の代わりにURIで使用されます。(非ASCII文字の場合、通常はUTF-8でバイトシーケンスに変換され、各バイト値は上記のように表されます。)

スペース文字の文字コードは32次のとおりです。

> ' '.charCodeAt(0)
32

これは20ベース16にあります:

> ' '.charCodeAt(0).toString(16)
"20"

その前にパーセント記号を付けると、が得られ%20ます。

于 2012-12-16T11:32:12.450 に答える
1

URLには、特殊なパス区切り文字であるなどの厳密な構文規則があるため/、URLでスペースを使用することはできず、すべての文字はASCIIの特定のサブセットである必要があります。これらの制限に関係なく、URLに任意の文字を埋め込むために、バイトをパーセントエンコードすることができます。バイトx20はASCIIエンコーディング(および他のほとんどのエンコーディング)のスペースを表すため%20、URLエンコードされたバージョンです。

于 2012-12-16T11:35:16.590 に答える
0

パーセントエンコーディングを使用します。URI(Uniform Resource Identifier)のRFCのパーセントエンコーディングの部分を見ることができます:一般的な構文

パーセントエンコードメカニズムは、コンポーネント内のデータオクテットを表すために使用されます。そのオクテットの対応する文字が
許可されたセットの外にあるか、コンポーネントの区切り文字として、または
コンポーネント内で使用されている場合です。パーセントエンコードされたオクテットは、文字
トリプレットとしてエンコードされます。これは、パーセント文字「%」と、それに続く
そのオクテットの数値を表す2桁の16進数で構成されます。たとえば
、「%20」はバイナリオクテット
「00100000」(ABNF:%x20)のパーセントエンコードであり、US-ASCIIではスペース
文字(SP)に対応します。

于 2012-12-16T11:35:04.533 に答える