web-dev-qa-db-ja.com

クエリ文字列値内で使用する区切り文字

クエリ文字列でファイル名のリストを受け入れる必要があります。すなわち:

http://someSite/someApp/myUtil.ashx?files=file1.txt|file2.bmp|file3.doc

使用する区切り文字に関する推奨事項はありますか?

22
Matthew Cole

ファイル名の場合は、ファイル名で許可されていない文字を選択することをお勧めします。これまでの提案には, | &これは一般にファイル名で許可されているため、あいまいさを引き起こす可能性があります。 /一方、Windowsでも、一般的には許可されていません。 URIで許可されており、クエリ文字列では特別な意味はありません。

例:

http://someSite/someApp/myUtil.ashx?files=file1.txt|file2.bmp|file3.docは有効なファイルを参照している可能性があるため悪いですfile1.txt|file2.bmp

http://someSite/someApp/myUtil.ashx?files=file1.txt/file2.bmp/file3.doc明確に3つのファイルを参照します。

15
MSalters

クエリパラメータを複数回持つことは合法であり、すべての場合に解析の問題がないことを保証する唯一の方法です。

http://someSite/someApp/myUtil.ashx?file=file1.txt&file=file2.bmp&file=file3.doc

セミコロン;は、ファイル名の一部である場合はURIエンコードする必要があります(%3B)、それでも、予約された用途であるクエリパラメータを分離している場合はそうではありません。

this rfc のセクション2.2を参照してください。

2.2。予約文字

URIには、「予約済み」セットの文字で区切られたコンポーネントとサブコンポーネントが含まれます。これらの文字は、一般的な構文、各スキーム固有の構文、またはURIの逆参照アルゴリズムの実装固有の構文によって区切り文字として定義される場合と定義されない場合があるため、「予約済み」と呼ばれます。 URIコンポーネントのデータが区切り文字としての予約文字の目的と競合する場合は、URIを形成する前に、競合するデータをパーセントエンコードする必要があります。

 reserved    = gen-delims / sub-delims

 gen-delims  = ":" / "/" / "?" / "#" / "[" / "]" / "@"

 sub-delims  = "!" / "$" / "&" / "'" / "(" / ")"
             / "*" / "+" / "," / ";" / "="
24
Cory Kendall

各ファイルに独自のクエリパラメータを作成することをお勧めします。

myUtil.ashx?file1=file1.txt&file2=file2.bmp&file3=file3.doc

このようにして、標準のクエリ解析とループを使用できます

7
Andrew Harry

ファイル名を文字列としてリストする必要がありますか?ほとんどの言語はクエリ文字列の配列を受け入れるので、次のように書くことができます

http://someSite/someApp/myUtil.ashx?files[]=file1.txt&files[]=file2.bmp&files[]=file3.doc

そうでない場合、または他の理由で使用できない場合は、ファイル名で許可されていないか異常な区切り文字を使用する必要があります。パイプ(|)は良いものです。そうしないと、コーディングで非常に使いやすいので、見えない文字をurlencodeすることができますが、実際にファイル名に含めるのは困難です。

私は通常、可能な場合は配列を使用し、それ以外の場合はパイプを使用します。

6
Jimmy Stenke

私はいつもダブルパイプ「||」を使ってきました。これが10年間のWebプログラミング以外に良い選択である理由を裏付ける良い証拠はなく、問題になったことがありません。

5

これは一般的な問題の1つです。どのように処理したか:文字列のリストを受け入れるメソッドを作成し、どの文字列にも含まれていない文字を見つけました。 (これは、文字列を単純に連結してから、さまざまな文字をテストすることで行いました。)文字が見つかったら、すべての文字列を連結しましたが、文字列の前に分離文字を追加しました。したがって、与えられた質問では、1つの例は次のようになります: http://someSite/someApp/myUtil.ashx?files = | file1.txt | file2.bmp | file3.doc そして別の例は次のようになります:- http://someSite/someApp/myUtil.ashx?files =、file1.txt、file2.bmp、file3.doc しかし、実際には区切り文字が残りの部分にないことを保証するメソッドを使用しているため文字列、それは安全です。初めて作成するのは少し手間がかかりましたが、いろいろな用途で何度も使ってきました。

1
Shawn Kovac

一般化すると、MSaltersの回答に基づいて、リスト内の項目に対して無効な区切り文字が最適です。たとえば、リストが価格の場合、値と混同される可能性があるため、コンマは適切な区切り文字ではありません。そのため、これらの回答のほとんどが示唆しているように、適切な汎用区切り文字はおそらく「|」だと思います。有効な値になることはめったにないためです。 「/」はパスに有効な場合があるため、一般的には最適な区切り文字ではない可能性があります。

0
timodius

カンマまたはセミコロンの使用を検討すると思います。

0
nan