2008-11-19 42 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