我需要接受查询字符串的文件名列表。即:

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

你在使用什么分隔符有什么建议?

有帮助吗?

解决方案

如果他们是文件名,一个不错的选择将是它在文件名中不允许的字符。到目前为止建议包括, | &这通常都可以在文件名,并因此可能导致歧义。在另一方面/一般是不允许的,甚至无法在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个文件。

其他提示

具有查询参数多次是合法的,并保证在任何情况下不解析问题的唯一办法:

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

在分号;必须URI编码,如果文件名的一部分(转向%3B),尚未如果是分离的查询参数是它的保留使用。

请参阅2.2节本RFC

  

2.2。保留字符

     

的URI包括由分隔组件和子组件      在“保留”的字符集。这些字符称为      “保留的”,因为它们可以(或可以不)被定义为通过分隔符      通用语法,由每个特定的方案的语法,或者由      一个URI的解引用算法的实现特定的语法。      如果一个URI组件的数据将与保留冲突      人物的宗旨作为分隔符,则冲突的数据必须是      百分比编码的URI之前形成。

 reserved    = gen-delims / sub-delims

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

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

我建议使每个文件中其自己的查询参数,即

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

此方式,您可以用标准查询解析和环

你需要列出文件名作为一个字符串? 大多数语言接受查询字符串数组,所以你可以把它写像

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

如果没有,或者你因为某些其他原因使用,你应该坚持到或者未在文件名中允许的或不寻常的分隔符。管道(|)是一个很好的,否则因为它们很容易在编码使用,你可以用urlencode一种无形的性格,但很难实际包括文件名

我通常使用阵列时可能的,并且管否则。

我一直使用双管“||”。我没有任何充分的证据来备份为什么这是十几年的网络编程等一个不错的选择,它从来都不是一个问题。

这是一个常见的问题。我该如何处理它是:我创建了接受字符串列表的方法,然后发现没有任何字符串的字符。 (我这样做是由一个简单的字符串拼接,然后对各种人物的测试。)一旦一个字符被发现,串连所有串在一起,但也被前置与分字符的字符串。因此,在给定的问题,其中一个例子是WUD: HTTP://someSite/someApp/myUtil.ashx?文件= | FILE1.TXT | file2.bmp | file3.doc 另有WUD是: HTTP://someSite/someApp/myUtil.ashx?文件=,FILE1.TXT,file2.bmp,file3.doc 但因为我实际使用,保证我的分隔符是不是在字符串的其余部分的方法,它是安全的。这是一个有点创建工作第一次,但我用了很多次,在各种应用中。

我想我会考虑使用逗号或分号。

我将建立在MSalters说回答,一概而论,最好的分隔符是一个无效在列表中的项目。例如,如果你的列表是价格,一个逗号是不好分隔符,因为它可以与值混淆。出于这个原因,因为大多数这些答案表明,我认为一个好的通用的分隔符可能是“|”因为它是很少的有效值。 “/”是也许不是最好的定界符通常,因为它是有效的,有时路径。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top