Asp.net mvc 为什么此查询字符串无效?

Asp.net mvc 为什么此查询字符串无效?,asp.net-mvc,invalid-url,Asp.net Mvc,Invalid Url,在我的asp.net mvc页面中,我创建了一个链接,其呈现方式如下: http://localhost:3035/Formula/OverView?colorId=349405&paintCode=744&name=BRILLANT%20SILVER&formulaId=570230 根据W3C验证器,这是不正确的,并且在第一个“与”符号之后会出现错误。它抱怨未编码的实体和p以及未识别的实体和p等 AFAIK&不应被编码,因为它是键值对的分隔符 对于那些关心的人:我将这些PAR作为querys

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

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

根据W3C验证器,这是不正确的,并且在第一个“与”符号之后会出现错误。它抱怨未编码的实体和p以及未识别的实体和p等

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

对于那些关心的人:我将这些PAR作为querystring发送,而不是作为“/”分隔值发送,因为我知道没有合适的方式来传递可选参数

要将所有位放在一起:

  • 锚点()标记的href属性需要编码的值
  • &编码到&
  • 若要在“&”是参数值的一部分时对其进行编码,请使用%26
是否将符号和编码为&使其成为参数值的一部分? 我需要它把第二个变量和第一个变量分开

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

因此,要获取url:

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

我的href值应该是什么


而且,我想我是世界上第一个关心这件事的人。。检查www并统计在W3C验证程序中验证其查询字符串的页面。

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

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


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

所有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>


将用户发送到,name=Bob,text=you&me“forever”。

我发现,对某些人来说,这是一个稍微令人困惑的概念。当您放入
&
在HTML页面中,例如在
中,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
//尽管您这样定义字符串:
myString=“这是什么东西”,你知道吗
//字符串实际上是:这是“某物”,你知道吗?
//查看HTML时,您会看到:
//但url实际上是:foo?bar=1&bar=2

您需要对所有HTML文档中的每个实体进行编码(除了少数例外,例如内部脚本标记)。将doctype设置为XHTML不会导致他的页面验证。我不是说将doctype更改为XHTML会修复它,但是,正如您所说的,属性中的实体应该在所有HTML变体中进行编码,我更改了答案以反映这一点。当时我想不出有什么更好的方法可以使用空格,一个符号和另一个字符实体:)