首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >请求对象未解码UrlEncoded

请求对象未解码UrlEncoded
EN

Stack Overflow用户
提问于 2009-09-17 16:43:09
回答 1查看 1.8K关注 0票数 0

C#,ASP.NET 3.5

我用一个编码的查询字符串创建了一个简单的URL:

代码语言:javascript
运行
复制
string url = "http://localhost/test.aspx?a=" +
     Microsoft.JScript.GlobalObject.escape("áíóú");

这变得很好:http://localhost/test.aspx?a=%E1%ED%F3%FA (这很好)

当我调试test.aspx时,我得到了奇怪的解码:

代码语言:javascript
运行
复制
string badDecode = Request.QueryString["a"];  //bad
string goodDecode = Request.Url.ToString();    //good

为什么QueryString不对这些值进行解码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-09-17 17:17:09

您可以尝试使用HttpServerUtility.UrlEncode

微软关于Microsoft.JScript.GlobalObject.escape的文档指出,它不会被集成到代码中直接使用。

编辑:

正如我在注释中所说的:这两种方法的编码方式不同,Request.QueryString希望使用HttpServerUtility.UrlEncode使用的编码,因为它在内部使用HttpUtility.UrlDecode。

(HttpServerUtility.UrlEncode实际上在内部使用HttpUtility.UrlEncode。)

您可以很容易地看出这两种方法之间的区别。

创建一个新的ASP.NET Web应用程序,添加对Microsoft.JScript的引用,然后添加以下代码:

代码语言:javascript
运行
复制
protected void Page_Load(object sender, EventArgs e)
{
  var msEncode = Microsoft.JScript.GlobalObject.escape("áíóú");
  var httpEncode = Server.UrlEncode("áíóú");

  if (Request.QueryString["a"] == null)
  {
    var url = "/default.aspx?a=" + msEncode + "&b=" + httpEncode;
    Response.Redirect(url);
  }
  else
  {
    Response.Write(msEncode + "<br />");
    Response.Write(httpEncode + "<br /><br />");

    Response.Write(Request.QueryString["a"] + "<br />");
    Response.Write(Request.QueryString["b"]);
  }
}

结果应该是:

代码语言:javascript
运行
复制
%E1%ED%F3%FA
%c3%a1%c3%ad%c3%b3%c3%ba

����
áíóú
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1439990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档