2012-10-22 114 views
0

我有一个基于查询字符串的值执行某些操作的页面。不过,我最近注意到,当查询字符串包含'&'字符时,这会中断。'&'字符中断查询字符串

我知道我可以编写一些代码来翻译父页上的'&'字符,但我不得不相信有更好的方法来做到这一点。

下面是一个例子: 查询字符串:运动科学&体育研究 这仅返回“运动科学”

这里是我得到的字符串代码:

string selectedDept = Request.QueryString [ "dept" ]; 

我会因为页面有时直接链接,所以不要加密URL。

+2

您需要对参数进行URL编码。它们应该在Request.QueryString中自动解码。 – Lloyd

+1

使用'HttpUtility.UrlEncode'和'HttpUtility.UrlDecode' –

回答

4

您不需要加密,您需要在生成Url之前对字符串进行编码。

如果您正在使用MVC,你可以使用:

var url = "dept=" + Url.Encode(strDept); 

否则,你也可以使用:

var url = "dept=" + HttpUtility.UrlEncode(strDept); 

更新

不幸的是,这将产生一个丑陋的网址:

dept=Exercise%20Science%20%26%20Sports%20Studies 
1

的符号(&)字符是定义到单独的请求参数,所以没有其他的方式来获得比来编码它这样的参数内。

你不需要加密的参数,只是给编码吧。这种情况下的常见编码是所谓的URL encoding。这种编码的好处在于,普通字母和数字保持原样;只有特殊字符使用百分号符号序列编码。

0

你应该编码你的参数,如: HttpUtility.UrlEncode(myUrl);

0

&符号用于分隔参数。

您需要对参数进行URL编码。它们应该在Request.QueryString中自动解码。

1

是的,&字符打破查询字符串。它被用作分离参数的元字符。如果您需要在查询参数中包含&字符,则必须将其编码为%26。在ASP.Net上,您可以使用HttpUtility.UrlEncode方法执行此操作,该方法在页面范围内的Server对象上调用。