2009-03-13 2 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

다중 값을 수행하는 +1 표준 방법 – 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 

세미콜론 ;는 URI 인코딩해야하는 경우 (%3B로 전환) 파일 이름의 일부, 아직 예약 된 사용 인 쿼리 매개 변수를 분리하는 것이 아닙니다.

섹션 2를 참조하십시오.2 of this rfc :

2.2. 예약 된 문자

많은 URI는 특정 특수 문자로 구성되거나 특정 특수 문자로 구분되는 구성 요소를 포함합니다. 이러한 문자는 URI 구성 요소 내에서의 사용이 예약 된 용도로 제한되므로 "예약 됨"이라고합니다. URI 구성 요소의 데이터가 예약 된 목적과 충돌하는 경우 URI를 구성하기 전에 충돌하는 데이터를 이스케이프 처리해야합니다.

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

답변에 두 부분이있는 것 같습니다. 명확히 해 주시겠습니까? – Sean

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 입니다.하지만 실제로는 구분 기호가 나머지 문자열에없는 것을 보장하는 방법을 사용하기 때문에 안전합니다. 처음 만들 때 약간의 작업 이었지만 다양한 응용 프로그램에서 여러 번 사용했습니다.

+0

여기에 코드를 게시하는 것이 좋습니다. – chrisinmtown