0

(我已经使用从 webdev 服务器运行的 vanilla asp.net 站点对此进行了测试,这也是一个问题):

我的 .master 文件中有以下标记

<!DOCTYPE html>
<html>
<head runat="server">
    <link href="/Styles/Site.css" rel="stylesheet" type="text/css" />
    <link rel="alternate" type="application/rss+xml" title="rss" href="/Pages/Static/Feed.aspx?type=rss&lang=en" />    
</head>

呈现的 html 如下所示:

<!DOCTYPE html>
<html>
<head>
    <link href="/Styles/Site.css" rel="stylesheet" type="text/css" />
    <link rel="alternate" type="application/rss+xml" title="asdsad" href="/Pages/Static/Feed.aspx?type=rss&amp;lang=en" />
</head>

(rss 链接“&”已编码为“&”)

但是,如果我将标记更改为

<!DOCTYPE html>
<html>
<head>
    <link href="/Styles/Site.css" rel="stylesheet" type="text/css" />
    <link rel="alternate" type="application/rss+xml" title="rss" href="/Pages/Static/Feed.aspx?type=rss&lang=en" />    
</head>

(在 head 标签上没有 runat="server")然后生成的 html 按预期出现:

<!DOCTYPE html>
<html>
<head runat="server">
    <link href="/Styles/Site.css" rel="stylesheet" type="text/css" />
    <link rel="alternate" type="application/rss+xml" title="rss" href="/Pages/Static/Feed.aspx?type=rss&lang=en" />    
</head>

显然,Asp.Net 对 url 进行了编码。碰巧的是,我确实需要将 head 标签设置为 runat="server",并且我还希望能够在其中的链接 URL 中包含“&”,我可以使用一些技巧来吃蛋糕并吃掉它也?

你的 安德烈亚斯

4

2 回答 2

3

这个问题之前也遇到过,找不到原因,最后在head里面放了一个文字,然后从后面的代码中填充了html。html:

<head runat="server">
    <asp:Literal runat="server" ID='litLinks' />
</head>

C#代码:

protected void Page_Load(object sender, EventArgs e)
{
  litLinks.Text = "<link rel='alternate' type='application/rss+xml' title='rss' href='/Pages/Static/Feed.aspx?type=rss&lang=en' />"
                  + "<link href='/Styles/Site.css' rel='stylesheet' type='text/css' />";
}
于 2011-01-04T11:06:32.780 回答
1

注意:如果您要投反对票,请解释原因,因为我所说的没有什么是错的,除非您另有证明。

你的意思是在 url 中转义 & 符号,因为在 url 中放置了一个非转义的 & 符号,浏览器期望有一些编码的东西。通过转义它,您可以告诉浏览器它是什么,一个&符号。

它不会破坏您的链接并且是有效的。

此外,如果您想在未定义新查询字符串参数的 url 中传递实际的 & 符号,那么您将 url 将 & 符号编码为 '%26'

编辑:因为您可能以某种非常奇怪的方式使用它。这就是为什么,ASP.Net 对 HTML 文档的 & 符号进行 HTML 编码是正确的。

当浏览器发出对 URL 的请求时,它不会发送对 HTML 编码 URL 的请求,它会发送对非 HTML 编码 URL 的请求。

如果由于某种原因您正在访问值服务器端或其他东西,那么您可以执行以下操作:

var url = new Uri(HttpUtility.HtmlDecode(@"http://www.google.com/somepage.aspx?key1=value1&key2=value2"));
var query = HttpUtility.ParseQueryString(url.Query);
var result = query["key2"];
Console.WriteLine(result);

因此,您首先解码链接的 HTML 版本,将其解析为 Uri,从中获取查询字符串并键入您的键/值集合。

于 2011-01-04T10:32:32.163 回答