3

这是我在 stackoverlow 上的第一篇文章,我在任何其他文章中都找不到解决方案,所以这里是:

我有一个在 url 中发送两个查询字符串的网页:

example.aspx?name=<%=name%>&sku=<%=sku%>

Request.QueryString["name"];然后我使用和收集值Request.QueryString["sku"];

当我查看发送查询字符串的页面源上的 url 时,一切看起来都很好,但是如果“名称”包含正斜杠 (/),当我检索到查询字符串。我试图用 %2F 替换 / 但这不起作用。如果“名称”查询字符串没有斜杠,那么一切看起来都是正确的。

有任何想法吗?

编辑:我最终不得不双重编码(server.urlencode)和双重解码才能正常工作。感谢你的帮助!

4

3 回答 3

4

实际上,您应该使用HttpServerUtility.UrlEncode方法对 URL 的值进行编码:

example.aspx?name=<%=Server.UrlEncode(name)%>&sku=<%=Server.UrlEncode(sku)%>

URL 编码确保所有浏览器都能正确传输 URL 字符串中的文本。问号 (?)、与号 (&)、斜线 (/) 和空格等字符可能会被某些浏览器截断或损坏。因此,这些字符必须在标签或查询字符串中编码,其中字符串可以由浏览器在请求字符串中重新发送。

编辑:

让我们用您提供的值来检查一下: name = Bellagio™ 16 1/2" High Downbridge Outdoor Wall Lightsku = 46910:首先我创建了一个具有 2 个属性的页面:

public string Name
{
    get
    {
        return "Bellagio™ 16 1/2\" High Downbridge Outdoor Wall Light";
    }
}

public string Sku
{
    get
    {
        return "46910";
    }
}

然后将链接定义添加到页面:

<a href='1.aspx?name=<%=Server.UrlEncode(Name)%>&sku=<%=Server.UrlEncode(Sku)%>'>
    this is a link
</a>

然后获取这些值(首先单击链接):

protected void Page_Load(object sender, EventArgs e)
{
    var name = Request.QueryString["name"];
    var sku = Request.QueryString["sku"];
}

这些值与您提供的值完全相同:Bellagio™ 16 1/2\" High Downbridge Outdoor Wall Light46910.

不幸的是,我无法重现您在第一条评论中发布的错误 URL:LifeSizePDF.aspx?productname=Bellagio&amp;%238482%3b+16+1%2f2&amp;quot%3­b+High+Downbridge+Outdoor+Wall+Light&amp;shortsku=46910%2f

于 2011-03-03T19:27:58.167 回答
2

使用 URL 编码来适当地格式化值,假设名称中的正斜杠是有意的并且希望与最终结果一起提取。

请注意,至少有两种方法可以轻松解决此问题,例如使用静态类HttpUtility,或者在 a 的上下文中Page使用Server属性:

var encodedValue = HttpUtility.UrlEncode(rawValue);

var encodedValue = Server.UrlEncode(rawValue);
于 2011-03-03T19:27:41.147 回答
0

您可以只修剪 sku 请求的最终值:

Request.QueryString["sku"].TrimEnd( '/' );
于 2011-03-03T19:25:23.030 回答