3

在我的 asp.net mvc 页面中,我创建了一个呈现如下的链接:

http://localhost:3035/Formula/OverView?colorId=349405&paintCode=744&name=BRILLANT%20SILVER&formulaId=570230

根据 W3C 验证器的说法,这是不正确的,并且在第一个 & 号之后会出错。它抱怨 & 未被编码和实体 &p 未被识别等。

AFAIK & 不应该被编码,因为它是键值对的分隔符。

对于那些关心的人:我将这些 pars 作为查询字符串而不是“/”分隔值发送,因为没有像我所知的传递可选参数的好方法。

将所有位放在一起:

  • 锚 (<a>) 标签的 href 属性需要一个编码值
  • & 编码为 &
  • 当它是参数值的一部分时对“&”进行编码,请使用 %26

不会将 & 符号编码为 & 使其成为我参数值的一部分吗?我需要它将第二个变量与第一个变量分开

事实上,通过编码我的 href 值,我确实摆脱了错误。但是,我现在想知道的是,例如,如果我的 colorId 是“123&456”,其中的 & 符号是值的一部分,该怎么办。由于必须对分隔符进行编码,因此如何处理已编码的 & 符号。可以这么说,它们是否需要被编码两次?

所以要获取网址:

www.mySite.com/search?query=123&amp;456&page=1

我的 href 值应该是多少?

另外,我想我是世界上第一个关心这个的人..去检查 www 并计算在 W3C 验证器中验证了他们的查询字符串的页面..

4

3 回答 3

4

作为属性一部分的实体通常应该被编码。因此你需要 & 而不仅仅是 &

即使它没有验证它也可以工作,因为大多数浏览器在接受什么方面非常、非常非常宽松。

此外,如果您要输出 XHTML,您必须在任何地方对每个实体进行编码,而不仅仅是在属性内部。

于 2008-11-19T15:27:38.093 回答
3

所有 HTML 属性都需要使用字符实体。你只需要把 & 改成 & 在脚本块内。

<a href="http://localhost:3035/Formula/OverView?colorId=349405&amp;paintCode=744&amp;name=BRILLANT%20SILVER&amp;formulaId=570230">Whatever</a>

在 HTML 文档中,如果您希望 & 直接显示在空格以外的内容旁边,则需要使用字符实体 &。如果它是属性的一部分,则 & 会像 & 一样工作。如果文档是 XHTML,则需要在任何地方使用字符实体,即使 & 旁边没有任何东西。您还可以使用其他角色实体作为属性的一部分,将它们视为实际角色。

如果您想以不同于参数分隔符的方式使用与号作为 URL 的一部分,则应使用 %26。

举个例子...

<a href="http://localhost/Hello?name=Bob&amp;text=you%20%26%20me%20&quot;forever&quot;">Hello</a>

将用户发送到http://localhost/Hello, name=Bob 和 text=you & me “永远”。

于 2008-11-19T15:28:04.470 回答
1

我发现这对某些人来说是一个有点混乱的概念。当您放入&amp;一个 HTML 页面时,例如在 中<a href="abc?def=5&amp;ghi=10">,URL实际上是 abc?def=5&ghi=10. HTML 解析器将实体转换为 & 符号。

想一想与在字符串中转义引号的方式完全相同:

// though you define your string like this:
myString = "this is \"something\" you know?"

// the string is ACTUALLY: this is "something" you know?

// when you look at the HTML, you see:
<a href="foo?bar=1&amp;baz=2">

// but the url is ACTUALLY: foo?bar=1&bar=2
于 2008-11-20T01:36:24.773 回答