ASP Response.Redirect没有URLEncode“+”号

问题描述:

在IIS 5.0之前Response.Redirect没有对您所指定的字符串进行编码。 URLEncode字符串是你自己的责任。ASP Response.Redirect没有URLEncode“+”号

在IIS 4.0中,我们使用

Response.Redirect Server.URLEncode("Page,One.asp") 

在IIS 5.0,我们一开始只是用

Response.Redirect("Page,One.asp") 

所以新的Response.Redirect功能URLEncodes您的字符串,没有其他选择。

只有一个问题。我无法在字符串中传递“+”号。 当执行Response.Redirect("sum=1+3")时,您希望它编码所有非字母数字字符,但“+”号在接收页面上变为空格字符。

当执行Response.Redirect(“sum=1%2B3”)时,会收到“404 Not Found”,因为服务器上不存在“sum%3D1%25B23”,因为%2B编码了两次。

我想将“+”编码为%2B,以便接收页面明白它实际上是某些文本的一部分并显示它。

让我给你举个例子: 当你键入 http://translate.google.com/#en|tr|1%2B2 到浏览器中输入PRES你会看到谷歌接受% 2B并将其解码为textarea中的+。

既不

的Response.Redirect( “http://translate.google.com/#en|tr|1%2B2”)

响应.Redirect(“http://translate.google.com/#en|tr|1+2”)

的效果与在我给的例子中。我只是想重定向到该页面。

还有一种方法,如先对字符串进行编码,然后用Response.Redirect unescape("Page%2COne%2Easp")重定向,但escape和unescape函数支持UTF-8和ASCII(0-127)的某些部分,但不支持高ANSI(128-255)字符,特别是欧洲重音字符。

有什么建议吗?

因此,新的Response.Redirect函数URLEncodes你的字符串,没有其他选择。

你是什么意思没有其他选择?

server.urlencode依然存在

+1

谢谢。我找到了一个办法。你是对的! server.urlencode仍然有效,但是当你想用response.redirect进行重定向时,它会被编码或者不会被再次编码。所以现在我使用response.addheader(“位置”,server.url编码(“字符串”)) – user1358065 2011-02-03 15:17:56