2008-11-19 43 views
3

在我的asp.net mvc的网页我创建呈现为一个链接:为什么这个查询字符串无效?

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

根据W3C验证,这是不正确的第一符号之后,它的错误。它抱怨的&不被编码,并且该实体& p无法识别等

AFAIK的&不应被编码,因为它是为关键值对的隔板。

对于那些关心:我发送这些语法作为查询字符串,而不是“/”分离的值,因为没有体面的方式传递我知道的可选参数。

把所有的位一起:

  • 锚(<一>)标记的href属性需要的编码值
  • &编码到&安培;
  • 编码的“&”当它是你的参数值的一部分,使用26%

岂不编码符号为&使我的参数值的一部分? 我需要它分开第一个变量

事实上,通过编码我的href值,我摆脱了错误。然而,我现在想知道的是,如果我的colorId是“123 & 456”,那么&符号就是值的一部分。 由于必须对分隔符进行编码,因此如何处理编码的&符号。他们需要两次编码才能说话吗?

因此,要获得的网址:

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

我应该我href的值是什么?

另外,我觉得我对第一人在世界上关心这个..去检查www和计算得到他们的查询字符串在W3C验证验证页面..

回答

3

所有HTML属性都需要使用字符实体。您只需要将&更改为& amp;在脚本块内。

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

任何地方,你想一个&显示紧邻除空白,什么HTML文档中,您需要使用字符实体&放;.如果它是属性的一部分,则可以使用& amp;将会像&一样工作。如果文档是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,与名= Bob和文本=你&我 “永远”。

4

实体,其一般来说属于应该编码的属性的一部分。因此你需要& amp;而不是仅仅&

它的工作原理,即使不验证,因为大多数浏览器都非常,非常在什么接受很宽松。另外,如果你要输出XHTML,你必须对每个实体进行编码,而不仅仅是属性内部。

+0

你需要在所有的HTML文档每一个实体(也有一些例外,比如里面的脚本标记)进行编码。将doctype设置为XHTML不会导致他的页面进行验证。 – Illandril 2008-11-19 19:21:50

+0

我并不是说要将doctype改为XHTML就可以修复它,但是,正如你所说的,属性中的实体应该被编码为所有的HTML变体,我改变了答案以反映这一点。 – 2008-11-19 19:40:46

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