URLの角かっこは使用できますか?
Apache commons HttpClient(3.0.1)がIOExceptionをスローすることに気付きましたが、wgetとFirefoxは角かっこを受け入れます。
URLの例:
http://example.com/path/to/file[3].html
私のHTTPクライアントはそのようなURLに遭遇しますが、コードにパッチを適用するか、例外をスローするか(実際にはそうあるべきです)がわかりません。
URLの角かっこは使用できますか?
Apache commons HttpClient(3.0.1)がIOExceptionをスローすることに気付きましたが、wgetとFirefoxは角かっこを受け入れます。
URLの例:
http://example.com/path/to/file[3].html
私のHTTPクライアントはそのようなURLに遭遇しますが、コードにパッチを適用するか、例外をスローするか(実際にはそうあるべきです)がわかりません。
RFC 3986の状態
バージョン 6 [RFC3513] 以降のインターネット プロトコル リテラル アドレスで識別されるホストは、IP リテラルを角括弧 ("[" および "]") で囲むことによって区別されます。これは、URI 構文で角括弧文字が許可される唯一の場所です。
したがって、そのような URI はエンコードされた状態で到着するはずなので、理論上は実際に目にすることはないはずです。
この質問は少し古いことは知っていますが、PHPは角かっこを使用してURLの配列を渡すことに注意したいと思います。
http://www.example.com/foo.php?bar[]=1&bar[]=2&bar[]=3
この場合$_GET['bar']
、が含まれますarray(1, 2, 3)
。
パス名で許可されていない文字は、#と?だけです。彼らは道の終わりを意味するので。
uri rfcには、決定的な答えがあります。
http://www.ietf.org/rfc/rfc1738.txt
安全ではない:
キャラクターはいくつかの理由で安全ではない可能性があります。URLが文字起こしまたは植字されたり、ワードプロセッシングプログラムの処理を受けたりすると、重要なスペースが消えたり、重要でないスペースが導入されたりする可能性があるため、スペース文字は安全ではありません。文字「<」および「>」は、フリーテキストのURLの区切り文字として使用されるため、安全ではありません。一部のシステムでは、引用符( "" ")を使用してURLを区切ります。文字"# "は安全ではなく、ワールドワイドウェブやその他のシステムでフラグメント/アンカーからURLを区切るために使用されるため、常にエンコードする必要があります。それに続く可能性のある識別子。文字「%」は、他の文字のエンコードに使用されるため、安全ではありません。ゲートウェイや他のトランスポートエージェントがそのような文字を変更することがあることが知られているため、他の文字は安全ではありません。これらの文字は、「{」、「}」、「|」、「\」、「^」、「〜」、「[」、「]」、および「`」です。
安全でない文字はすべて、常にURL内にエンコードする必要があります。たとえば、通常はフラグメント識別子やアンカー識別子を処理しないシステムでも、文字「#」をURL内にエンコードする必要があるため、URLをそれらを使用する別のシステムにコピーする場合は、URLを変更する必要はありません。 URLエンコーディング。
答えは、それらは16進エンコードされるべきであるということですが、postelの法則を知っていると、ほとんどのものはそれらを逐語的に受け入れます。
URLを受け入れ、特殊文字が導入されたときに例外をスローしないブラウザまたはWeb対応ソフトウェアは、ほとんどの場合、特殊文字を舞台裏でエンコードすることが保証されています。中括弧、角括弧、スペースなどはすべて、競合が発生しないように、それらを表すための特別なエンコードされた方法を備えています。前の回答と同様に、これらに対処する最も安全な方法は、URLを解決しようとするものに渡す前にURLエンコードすることです。
HttpClient commons クラスを使用するには、org.apache.commons.httpclient.util.URIUtil クラス、具体的には encode() メソッドを調べる必要があります。これを使用して、取得を試みる前に URL を URI エンコードします。
StackOverflow はそれらをエンコードしていないようです:
これらはすべてのWebサーバーでサポートされているわけではないため、URLエンコードするのが最適です。時には、基準があっても、誰もがそれに従うわけではありません。
URL仕様によると、角かっこは有効なURL文字ではありません。
関連するスニペットは次のとおりです。
「国別」および「句読点」の文字はどのプロダクションにも表示されないため、URLに表示されない場合があります。
全国{| } | vline | [| ] | \ | ^ | 〜
句読点<| >>
角かっこは安全ではないと考えられていますが、ほとんどのブラウザは正しく解析します。角かっこを他の文字に置き換える方が良いとは言いました。