为什么逗号URL被编码?

时间:2012-01-12 00:34:10

标签: asp.net-mvc forms query-string urlencode

在ASP.NET MVC中调试时,我看不出:

之间的区别
http://mysite.com?q=hi,bye

http://mysite.com?q=hi%2Cbye

查询字符串参数“q”的值始终为“hi,bye”。

为什么逗号编码?

我想做这样的事情https://stackoverflow.com/a/752109/173957

我有这样的表格:

<form method="GET" action="/Search">
     <input type="hidden" name="q" value="hi,bye"/>
     <input type="submit" value="ok"/>
</form>

如何防止此值被编码?

4 个答案:

答案 0 :(得分:19)

URI规范RFC 3986指定URI路径组件不包含未编码的保留字符,逗号是保留字符之一。对于 sub-delims (例如逗号),将其保留为未编码的风险,将该字符视为URI方案中的分隔符语法。百分比编码保证字符将作为数据传递。

答案 1 :(得分:8)

我发现不需要网址编码的字符列表: http://web.archive.org/web/20131212154213/http://urldecoderonline.com/url-allowed-characters.htm

<强>更新
由于原始链接断开,我使用archive.org从2013年12月的页面中获取以下文本

允许的网址字符列表

未保留 - 可能已编码,但没有必要

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 - _ . ~

保留 - 有时需要编码

! * ' ( ) ; : @ & = + $ , / ? % # [ ]

答案 2 :(得分:2)

这实际上取决于浏览器。浏览器采用HTML表单并根据表单的输入决定如何构建URL。

如果您使用的是旧版(或编程不佳)的浏览器,则可能无法对逗号进行编码。如果您遵守RFC标准,那么它确实应该被编码。

如果您想阻止为所有浏览器编码逗号,则必须使用JavaScript并自行构建URL。

<script lang="JavaScript">
    document.location.href = "/Search?q=hi,bye";
</script>

在任何情况下,它都无关紧要,因为无论如何你应该解码查询字符串参数,结果将是相同的。

答案 3 :(得分:-1)

有几个字符具有特殊含义(如+?#etc)或在URL中直接不允许(如空格,逗号等)。要在URL中使用这些字符,您需要对它们进行编码和解码。 Read more Here

ASP.NET会自动对所有必需的字符进行编码和解码,因此您无需担心它们。