25

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

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

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

4

8 に答える 8

29

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

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

セミコロン;は、ファイル名の一部(になっている%3B)の場合はURIエンコードする必要がありますが、予約済みのクエリパラメータを区切る場合はそうではありません。

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

2.2。予約文字

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

 reserved    = gen-delims / sub-delims

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

 sub-delims  = "!" / "$" / "&" / "'" / "(" / ")"
             / "*" / "+" / "," / ";" / "="
于 2013-01-09T07:48:47.370 に答える
14

それらがファイル名である場合、ファイル名で許可されていない文字を選択することをお勧めします。これまでに提案され, | &たものは、ファイル名で一般的に許可されているため、あいまいさにつながる可能性があります。/一方、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 つのファイルを指します。

于 2009-03-13T14:08:34.043 に答える
8

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

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

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

于 2009-03-13T13:50:37.033 に答える
7

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

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

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

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

于 2009-03-13T13:52:03.927 に答える
0

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

于 2009-03-13T13:46:30.820 に答える
0

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

于 2012-12-21T16:56:26.610 に答える