【问题标题】:Response.redirect url encodes spaces to %20 in querystringsResponse.redirect url 编码的空格到查询字符串中的 %20
【发布时间】:2011-04-14 11:10:58
【问题描述】:

Response.Redirect("./blah.aspx?key=my value with spaces");

它将浏览器发送到:

mysite/blah.aspx?key=my%20value%20with%20spaces

现在我明白它为什么这样做了 - 为了古老的浏览器会窒息空间。但实际上,我想要的是一个漂亮的 url,带有空格而不是 %,因为它的工作原理是一样的。

有什么方法可以停止 response.redirect 对我的空间进行 urlencoding?

非常感谢

【问题讨论】:

  • 所以您认为带有空格的 URL “好看”?我建议你看看这个 SO 问题:stackoverflow.com/questions/497908/…
  • 看了一下,它说“空格字符是不安全的,因为当 URL 被转录或排版或接受文字处理程序的处理时,重要的空格可能会消失,并且可能会引入不重要的空格。” - 我真的不打算将我的 URLS 通过文字处理器,我认为它会好的。
  • 您打算如何处理 URI 并不重要。 URI 是根据国际标准定义的,该标准必须预期它将用于各种用例(与在某些情况下常用的空格分隔列表相比,字处理器在这里几乎不是最难的情况)。因为在很多情况下空格根本不起作用,所以空格是不允许的。
  • 好的,别担心。我已经使用了空格替换破折号选项。

标签: c# asp.net url


【解决方案1】:

你不能有一个带空格的有效 URL,空格字符在 URL 中实际上是非法的。

您不能让 Response.Redirect 方法避免对空格进行编码,它并非旨在创建非法 URL。

【讨论】:

  • +1。发现。编码的存在是有原因的,人们为什么要尝试与之抗争?
  • 我知道,你是对的,但这是一个 Intranet 应用程序,我可以打破一些规则。有什么想法吗?
  • 我认为不可能做到这一点,在您的网址中有空格有那么重要吗?为什么不直接用其他东西替换它们呢,反正 URL 中的空格看起来很可怕..
  • 完全正确。只需使用下划线或连字符即可。
  • 你可以让你自己的重定向方法打破你想要的任何规则。它所做的只是用重定向页面替换当前输出,然后调用 Response.End.
【解决方案2】:

您总是可以在重定向之前用分数替换键中的空格,并在事后再次将它们“解码”为空格,如下所示:

string urlString = "./blah.aspx?key=my value with spaces";
Response.Redirect(urlString.Replace(' ','-'));

在抓取查询字符串的页面上:

string queryKey = Request["key"].Replace('-',' ');

(注意Request["key"] here 中的空值)

【讨论】:

    猜你喜欢
    • 2010-12-10
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 2012-06-02
    相关资源
    最近更新 更多