質問

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リテラルを囲むことによって区別されます( [" and "])。これは、URI構文で四角いブラケット文字が許可される唯一の場所です。

したがって、そのような URI はエンコードされて届くはずなので、理論上は実際に公開されることはないはずです。

他のヒント

この質問が少し古いことは承知していますが、PHP では URL で配列を渡すために括弧を使用することに注意したいと思います。

http://www.example.com/foo.php?bar[]=1&bar[]=2&bar[]=3

この場合 $_GET['bar'] 含まれます array(1, 2, 3).

URL を受け入れ、特殊文字が導入されたときに例外をスローしないブラウザまたは Web 対応ソフトウェアは、ほぼ確実にバックグラウンドで特殊文字をエンコードしています。中括弧、角括弧、スペースなどはすべて、競合を生じないように特別にエンコードされた表現方法を持っています。前の回答によると、これらに対処する最も安全な方法は、URL を解決しようとするものに渡す前に、それらを URL エンコードすることです。

パス名で使用できない文字は、# と ? だけです。それらは道の終わりを意味するからです。

uri rfc には決定的な答えがあります。

http://www.ietf.org/rfc/rfc1738.txt

安全ではありません:

キャラクターはさまざまな理由で安全でない可能性があります。URLが転写されたり、化石セットされたり、単語処理プログラムの治療を受けたりすると、重要なスペースが消え、取るに足らないスペースが導入される可能性があるため、スペースキャラクターは安全ではありません。文字「<」と「>」は、無料テキストでURLの周りの区切り文字として使用されているため、安全ではありません。引用マーク( "" ")は、一部のシステムでURLを区切るために使用されます。キャラクター「#」は安全ではなく、World Wide Webおよび他のシステムで使用されて、それに続く可能性のあるフラグメント/アンカー識別子からURLを区切るため、常にエンコードする必要があります。キャラクター「%」は、他のキャラクターのエンコーディングに使用されるため、安全ではありません。ゲートウェイや他の輸送エージェントは、そのようなキャラクターを変更することがあることが知られているため、他のキャラクターは安全ではありません。これらの文字は、「{"、"} "、" | "、" "、"^"、"、 "、" ["、"]、および「 `」です。

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

答えは、彼らは、 すべき 16 進数でエンコードされますが、ポステルの法則を知っていると、ほとんどのものはそのまま受け入れられます。

HttpClient commons クラスを使用するには、org.apache.commons.httpclient.util.URIUtil クラス、特に encode() メソッドを調べます。これを使用して、URL を取得する前に URI エンコードします。

StackOverflow はそれらをエンコードしていないようです。

https://stackoverflow.com/search?q=square+brackets+[url]

これらは明らかにすべての Web サーバーでサポートされているわけではないため、これらを URL エンコードするのが最善です。場合によっては、基準があっても全員がそれに従うわけではありません。

による URL指定, 、角括弧は有効な URL 文字ではありません。

関連するスニペットは次のとおりです。

「国民」および「句読点」のキャラクターは、どの作品にも現れないため、URLに表示されない場合があります。
ナショナル{| } | vline | [| ] | | ^ | 〜
句読点<| >

角括弧 [ そして ] URL 内の はサポートされていないことがよくあります。

それらを次のように置き換えます %5B そして %5D:

  • コマンドラインを使用した次の例は、以下に基づいています。 bash そして sed:

    url='http://example.com?day=[0-3][0-9]'
    encoded_url="$( sed 's/\[/%5B/g;s/]/%5D/g' <<< "$url")"
    
  • Javaの使用 URLEncoder.encode(String s, String enc)

  • PHPの使用 rawurlencode() または urlencode()

    <?php
    echo '<a href="http://example.com/day/',
        rawurlencode('[0-3][0-9]'), '">';
    ?>
    

    出力:

    <a href="http://example.com/day/%5B0-3%5D%5B0-9%5D">
    

    または:

    <?php
    $query_string = 'day=' . urlencode('[0-3][0-9]') .
                    '&month=' . urlencode('[0-1][0-9]');
    echo '<a href="http://example.com?',
          htmlentities($query_string), '">';
    ?>
    
  • お気に入りのプログラミング言語を使用して...コメントを投稿するか、この回答を直接編集して、プログラミング言語から使用する関数を追加して、この回答を拡張してください ;-)

詳細については、「 RFC 3986 URL 構文を指定します。の 付録 A についてです %-encoding クエリ文字列内 (括弧は次のものに属します) 「ゲンデリム」 することが %-encoded).

角括弧は安全ではないと考えられていますが、ほとんどのブラウザは角括弧を正しく解析します。ただし、角括弧を他の文字に置き換えた方がよいでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top