w3fools は、URLにスペースを含めることができると主張しています: http://w3fools.com/#html_urlencode
これは本当ですか? URLにエンコードされていないスペースを含めるにはどうすればよいですか?
HTTP要求の要求行 は区切り文字としてスペースを使用し、{the method}{space}{the path}{space}{the protocol}
としてフォーマットされているという印象を受けています。
GET /index.html http/1.1
したがって、URLにスペースを含めるにはどうすればよいですか?可能であれば、スペースを+
に置き換える習慣はどこから来たのですか?
URLにリテラルスペースを含めることはできません。 percent-encoding を使用してエンコードするか、 RLセーフ文字 ( application/x-www-form-urlencoded スペースに+
の代わりに%20
を使用します)。
しかし、ステートメントが正しいか間違っているかは解釈に依存します。構文的には、URIにはリテラルスペースを含めることはできず、エンコードする必要があります。意味的には、%20
はスペースではありません(明らかに)が、はスペースを表します。
彼らは確かに愚か者です。 RFC 3986 付録Aを見ると、URLを定義するための文法のどこにも「スペース」が記載されていないことがわかります。文法のどこにも言及されていないため、スペースをエンコードする唯一の方法は、パーセントエンコード(%20
)を使用することです。
実際、RFCでは、スペースは区切り文字であり、無視する必要があるとさえ規定されています。
場合によっては、余分な空白(スペース、改行、タブなど)を追加して、行間で長いURIを分割する必要があります。 URIが抽出されるとき、空白は無視されるべきです。
そして
堅牢性のために、ユーザーが入力したURIを受け入れるソフトウェアは、区切り文字と埋め込まれた空白の両方を認識して削除しようとする必要があります。
奇妙なことに、+
をスペースのエンコーディングとして使用することは、サブデリミターとして予約されていますが、RFCでは言及されていません。私は、その使用が単なる慣習であるか、別のRFC(おそらくHTTP)でカバーされていると思います。
スペースは次のように単に「%20」に置き換えられます。
そこにある情報は部分的に正しいと思います:
それは真実ではない。 URLにはスペースを使用できます。スペースが+記号に置き換えられることを定義するものはありません。
既に述べたように、URLはスペースを使用できません。 HTTP要求はめちゃくちゃになります。 +
は標準ですが、%20
がどこで定義されているかわかりません。