2010-02-23 86 views
4

什麼是編碼在錨標記網址的XHTML /嚴格的文檔中的正確方法:如何正確編碼錨點href

<a href="http://www.sit.com/page/<%= HttpUtility.UrlEncode("String that might contain unicode and dangerous characters like +, /, \\, <, >, \", ', =") %>"> 
    Anchor text 
</a> 

<a href="http://www.site.com/page/<%= HttpUtility.HtmlEncode("String that might contain unicode and dangerous characters like +, /, \\, <, >, \", ', =") %>"> 
    Anchor text 
</a> 

<a href="http://www.site.com/page/<%= CustomEncode("String that might contain unicode and dangerous characters like +, /, \\, <, >, \", ', =") %>"> 
    Anchor text 
</a> 

其中CustomEncode將被定義。

我用asp.net-mvc標記了這個問題,因爲我提出了以下問題。假設由模板產生的缺省路由我試過:

<%= Html.RouteLink("action text", new { id ="a/b" }) %> 
<%= Html.RouteLink("action text", new { id = Html.Encode("a/b") }) %> 

這既呈現爲

<a href="/Home/Index/a/b">action text</a> 

<%= Html.RouteLink("action text", new { id = Url.Encode("a/b") }) %> 

呈現爲

<a href="/Home/Index/a%252fb">action text</a> 

在哪第一次對我來說似乎是正確的,但當我點擊鏈接我得到錯誤400錯誤的請求。

我把這個在同一頁上,以測試如果ID參數正確傳遞:

<% if (ViewContext.RouteData.Values.ContainsKey("id")) { %> 
    <div><%= Html.Encode(ViewContext.RouteData.Values["id"]) %></div> 
<% } %> 

答案也可能是簡單地避免在網址的搜索引擎優化的目的這些字符。如果是這種情況,我會避免它們,但我只是好奇CMS和博客如何處理這一問題。

例如在SO問題標題上,如a/b將在錨href中呈現爲a-b,所以我猜這裏有一些自定義事件正在進行,我正在尋找最佳實踐。

+1

「我只是好奇CMS和博客如何處理這個問題。」通常剝離它們。博客slu almost幾乎從不編碼。它擊敗了人類可讀的slu whole的全部目的。 – 2010-02-23 18:48:01

+0

@克雷格這似乎很合理。除了維護帶有*可移動字符的字典之外,還有一些內置的框架可以讓我輕鬆地對這些URL或者某些第三方API進行編碼? – 2010-02-23 18:49:45

+0

關於我的頭頂,我不知道。 – 2010-02-23 20:24:51

回答

2

我這樣做this way,從Jeff Atwood用於Stack Overflow的東西中挑選出來的。

+0

不錯,謝謝你的鏈接喬治。 – 2010-02-24 16:39:52