web-dev-qa-db-ja.com

URLにスペースを含めることはできますか?

URI(具体的にはHTTP URL)に1つ以上のスペース文字を含めることは許可されていますか? URLがmustにエンコードされている場合、+は単に一般的な慣習に従っているのですか、それとも正当な代替手段ですか?

特に、スペースmustを含むURLがエンコードされていることを示すRFCを指すことができますか?

質問の動機: Webサイトのベータテスト中に、スペースを含むURLが作成されたことに注意しました。 Firefoxは正しいことをしているように見えたが、それは私を驚かせた!しかし、これらのURLを修正する必要性を感じるように、開発者にRFCを指示できるようにしたかったのです。

121
Joe Casadonte

RFC 1738

安全でない:

文字は、いくつかの理由で安全でない場合があります。 スペース文字は安全ではありません。URLが転写またはタイプセットされるか、ワープロプログラムの処理を受けると、重要なスペースが消えたり、意味のないスペースが導入される可能性があるためです。文字"<"および">"は、フリーテキストのURLの区切り文字として使用されるため、安全ではありません。一部のシステムでは、引用符(""")を使用してURLを区切ります。文字"#"は安全ではなく、その後に続く可能性のあるフラグメント/アンカー識別子からURLを区切るためにWorld Wide Webや他のシステムで使用されるため、常にエンコードする必要があります。文字"%"は、他の文字のエンコードに使用されるため安全ではありません。ゲートウェイや他のトランスポートエージェントはこのような文字を変更することがあるため、他の文字は安全ではありません。これらの文字は、"{""}""|""\""^""~""[""]"です。 、および"`"

すべての安全でない文字は、常にURL内でエンコードする必要があります。たとえば、文字"#"は、通常はフラグメントまたはアンカー識別子を処理しないシステムでもURL内でエンコードする必要があります。そのため、URLを使用する別のシステムにURLをコピーする場合、 URLエンコードを変更します。

93
Marc Novakowski

なぜエンコードする必要があるのですか?リクエストは次のようになります。

GET /url HTTP/1.1
(Ignoring headers)

空白で区切られた3つのフィールドがあります。 URLにスペースを入れた場合:

GET /url end_url HTTP/1.1

4つのフィールドがあることがわかっているので、HTTPサーバーはそれが無効な要求であることを通知します。

GET /url%20end_url HTTP/1.1

3フィールド=>有効

注:クエリ文字列(?の後)では、スペースは通常+としてエンコードされます

GET /url?var=foo+bar HTTP/1.1 

のではなく

GET /url?var=foo%20bar HTTP/1.1 
40
Julien

短い答え:いいえ、スペースをエンコードする必要があります。 it isスペースを+としてエンコードするのは正しいですが、クエリ文字列のみです。パスでは%20を使用する必要があります。

31
Peter Hilton

URLは RFC 3986 で定義されていますが、他のRFCも同様に関連していますが、 RFC 1738 は廃止されています。

他の多くのキャラクターと一緒にスペースを入れることはできません。これらの禁じられた文字は、しばしば何らかの形で表現する必要があるため、「%」プレフィックスを持つASCII 16進数に変換してURLにエンコードするスキームがあります。

ほとんどのプログラミング言語/プラットフォームは、URLをエンコードおよびデコードする機能を提供しますが、RFC標準に適切に準拠していない場合があります。たとえば、PHPにはないことを知っています。

9
Rob Williams

URLにはスペース文字を含めることができ、ほとんどのブラウザーで%20として表示されますが、ブラウザーのエンコード規則は頻繁に変更され、ブラウザーがURLをどのように表示するかに依存できません。

したがって、代わりに、URLのスペース文字を、URLをより読みやすく、「きれい」にすると思われる任意の文字に置き換えることができます;)..... O優先される一般的な文字は「-」、「_」、 "+" ....しかし、これらは強制ではないため、URLに既に含まれているはずのない文字を使用できます。

特定のブラウザおよびプラットフォームでエラーが発生する可能性があるため、URL Space Character Replacementとして%、&、}、{、]、[、/、>、<を使用しないでください。

ご覧のとおり、Stakオーバーフロー自体は、スペース(%20)の置換として「-」文字を使用しています。

幸せな質問をしてください。

6
A.M Web Surfer

はい、スペースは通常「%20」にエンコードされます。 URLに渡すパラメーターは、単に安全上の理由からエンコードする必要があります。

6
user54650

URLはnotにスペースを含める必要があります。対処する必要がある場合は、%20のエンコードされた値を使用してください

5
Chris Ballance

スペースを含むURLをエンコードする必要があることを示すRFCを誰かが指すことはできますか?

URI、つまりURLは、RFC 3986で定義されています。

あちらで定義されている文法を見ると、スペース文字が構文的に正当なURLの一部になることは決してないことに気付くでしょう。したがって、「スペースのあるURL」という用語はそれ自体矛盾です。

5
Julian Reschke

あなたの質問に答えるために。アプリケーションがURLで使用される値のスペースを置き換えることはかなり一般的だと思います。この理由は、通常、発生するより読みにくいパーセント(URI)エンコーディングを回避するためです。

Percent-encoding に関するこのウィキペディアの記事をご覧ください。

4
Eric Schoonover

Firefox 3は、UR​​Lの%20sをアドレスバーのスペースとして表示します。

2
Sophie Alpert