2009-03-13 21 views

答えて

14

ファイル名の場合は、ファイル名では許可されない文字を選択するのがよいでしょう。これまでのところ、, | &が含まれており、一般にファイル名で許可されているため、あいまいになる可能性があります。一方、/は一般に許可されていません.Windowsでは許可されません。これはURIで許可され、クエリ文字列に特別な意味を持ちません。

例:それは有効なファイルfile1.txt|file2.bmpを参照する可能性があるため

http://someSite/someApp/myUtil.ashx?files=file1.txt|file2.bmp|file3.docが悪いです。

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

+6

この回答はほとんど誤りです。 |文字はURL、公式スペックごとに有効ではなく、使用しようとするとさまざまな問題が発生する可能性があります。 &文字は、名前と値のペアを区切るためにクエリ文字列に予約されています。コンマは正しい選択かもしれないが、より多くの研究が必要である。 –

+0

|ファイル名には使用できません。 Linuxでは、ファイル名に任意の文字を使用できます。 Windowsでは、はい、いくつかの除外項目がありますが、これには|が含まれています。 –

+4

@DougS:ファイル名に関して '|'が悪い選択である理由を説明しています。それはまた、URLの悪い選択かもしれない、私はそれについての主張をしていない。それで私の答えはどうやって間違っていますか? – MSalters

-1

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

+2

セミコロンは、&の有効な置換えですが、良い選択ではありません: "一連のペアはアンパサンド、 '&'またはセミコロン、 ';'で区切られています。 (http://en.wikipedia.org/wiki/Query_string#Structure) – dwynne

4

私は常にダブルパイプ "||"を使用しています。私はこれがウェブプログラミングの10年以外の良い選択である理由をバックアップする良い証拠を持っていませんし、決して問題ではありません。私は、それぞれが独自のクエリパラメータを提出することをお勧めし

5

、すなわち

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

あなただけの標準クエリ構文解析とループを使用することができるこの方法

+0

複数の値を行う標準的な方法 – bobince

6

あなたは文字列としてファイル名をリストする必要がありますか? ほとんどの言語あなたはそれがない、またはあなたが何らかの理由で使用できない場合は、あなたが許可されていないいずれかの区切り文字に固執する必要があります

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

ようにそれを書くことができるように、クエリ文字列に配列を受け入れますかファイル名で珍しい。パイプ(|)は良いものです。そうでなければ、目に見えない文字は、コーディングには使いやすいものの、実際にはファイル名に含めるのが難しいため、urlencodeすることができます。

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

+0

仮定するのは危険です。ファイル名には使用できません。 Linuxでは、ファイル名に任意の文字を使用できます。 Windowsでは、はい、いくつかの除外項目がありますが、これには|が含まれています。 –

0

私はMSaltersの答えを一般化するために、最善の区切り記号はリスト内の項目に無効なものであると言って答えます。たとえば、リストが価格の場合、コンマは値と混同される可能性があるため、区切り記号が間違っています。その理由から、これらの答えのほとんどが示唆するように、良い汎用デリミタはおそらく "|"まれに有効な値であるためです。 "/"はパスのために時々有効であるように一般的に最善の区切りではないかもしれません。クエリを持つ

19

は合法であり、すべてのケースで、解釈上の問題がないことを保証する唯一の方法を複数回パラメータ:

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

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

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

2.2です。予約された文字

多くのURIには、特定の特殊文字で構成されたか、または特定の特殊文字で区切られたコンポーネントが含まれています。これらの文字はURIコンポーネント内での使用が予約された目的に限定されているため、「予約済み」と呼ばれます。 URIコンポーネントのデータが予約された目的と矛盾する場合、競合するデータはURIを形成する前にエスケープする必要があります。

reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | "," 
+0

あなたの答えは2つの部分を持つようです。明確にできますか? – Sean

1

これは、1つの共通の問題です。私はそれをどのように扱ったのですか:文字列のリストを受け取り、文字列の中にない文字を見つけたメソッドを作成しました。文字列を単純に連結してから、さまざまな文字をテストします。文字が見つかると、すべての文字列が連結されますが、分離文字も文字列の先頭に追加されます。だから、与えられた質問では、1つの例wud: http://someSite/someApp/myUtil.ashx?files=|file1.txt|file2.bmp|file3.doc と別のwud: http://someSite/someApp/myUtil.ashx?files=,file1.txt,file2.bmp,file3.doc 私は実際に私の区切り文字が残りの文字列ではないことを保証するメソッドを使用するので、それは安全です。最初に作成するのはちょっとした作業でしたが、私はこれをさまざまなアプリケーションで何度も使用しました。

+0

ここにコードを掲載するのはいかがですか? – chrisinmtown

関連する問題