在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>
如何防止此值被编码?
答案 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会自动对所有必需的字符进行编码和解码,因此您无需担心它们。