Asp.net mvc 为什么此查询字符串无效?
在我的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
http://localhost:3035/Formula/OverView?colorId=349405&paintCode=744&name=BRILLANT%20SILVER&formulaId=570230
根据W3C验证器,这是不正确的,并且在第一个“与”符号之后会出现错误。它抱怨未编码的实体和p以及未识别的实体和p等
AFAIK&不应被编码,因为它是键值对的分隔符
对于那些关心的人:我将这些PAR作为querystring发送,而不是作为“/”分隔值发送,因为我知道没有合适的方式来传递可选参数
要将所有位放在一起:
- 锚点()标记的href属性需要编码的值
- &编码到&李>
- 若要在“&”是参数值的一部分时对其进行编码,请使用%26
www.mySite.com/search?query=123&;456&page=1
我的href值应该是什么
而且,我想我是世界上第一个关心这件事的人。。检查www并统计在W3C验证程序中验证其查询字符串的页面。作为属性一部分的实体通常应进行编码。因此,你需要&;而不仅仅是& 即使它没有验证,它也能工作,因为大多数浏览器在接受什么方面都非常、非常、非常宽容
此外,如果要输出XHTML,则必须在任何地方对每个实体进行编码,而不仅仅是在属性内部。所有HTML属性都需要使用字符实体。您只需将&;更改为&;即可;在脚本块中
<a href="http://localhost:3035/Formula/OverView?colorId=349405&paintCode=744&name=BRILLANT%20SILVER&formulaId=570230">Whatever</a>
在HTML文档中,如果希望&直接显示在除空白以外的其他内容旁边,则需要使用字符实体&;。如果它是属性的一部分,&;就好像它是一个&。如果文档是XHTML,那么您需要在任何地方使用字符实体,即使您没有紧靠&。您还可以使用其他角色实体作为属性的一部分,将其视为实际角色
如果您希望以非参数分隔符的方式将符号用作URL的一部分,则应使用%26
例如
<a href="http://localhost/Hello?name=Bob&text=you%20%26%20me%20"forever"">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&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变体中进行编码,我更改了答案以反映这一点。当时我想不出有什么更好的方法可以使用空格,一个符号和另一个字符实体:)