当前位置:  开发笔记 > 开发工具 > 正文

在查询字符串值中使用的分隔符

如何解决《在查询字符串值中使用的分隔符》经验,为你挑选了5个好方法。

我需要在查询字符串中接受文件名列表.即:

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

您对使用什么分隔符有什么建议吗?



1> Cory Kendall..:

多次查询参数是合法的,并且是在所有情况下保证不解析问题的唯一方法:

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  = "!" / "$" / "&" / "'" / "(" / ")"
             / "*" / "+" / "," / ";" / "="



2> MSalters..:

如果它们是文件名,那么一个好的选择就是文件名中不允许的字符.到目前为止的建议包括, | &文件名中通常允许的建议,因此可能导致含糊不清./另一方面通常是不允许的,甚至在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个文件.


这个答案大多不正确.| 根据官方规范,字符在URL中无效,如果您尝试使用它,可能会导致各种问题.&字符在查询字符串中保留,以分隔名称/值对.逗号可能是一个好的选择,但需要更多的研究.
@DougS:我在解释为​​什么`|`在文件名方面是一个糟糕的选择.在URL中它也可能是一个糟糕的选择,我甚至没有对此提出任何要求.那怎么能让我的回答不正确呢?

3> Andrew Harry..:

我建议让每个文件都有自己的查询参数,即

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

这样您就可以使用标准查询解析和循环



4> Jimmy Stenke..:

你需要将文件名列为字符串吗?大多数语言接受查询字符串中的数组,因此您可以像编写它一样编写它

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

如果没有,或者由于某些其他原因而无法使用,则应该坚持使用文件名中不允许或不常见的分隔符.管道(|)是一个很好的,否则你可以urlencode一个不可见的字符,因为它们很容易在编码中使用,但实际上包含在文件名中更难.

我通常尽可能使用数组,否则使用管道.



5> Rick Hochste..:

我总是用双管"||".我没有任何好的证据来支持为什么这是一个很好的选择,而不是10年的网络编程,它从来都不是问题.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有