什麼是編碼在錨標記網址的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
,所以我猜這裏有一些自定義事件正在進行,我正在尋找最佳實踐。
「我只是好奇CMS和博客如何處理這個問題。」通常剝離它們。博客slu almost幾乎從不編碼。它擊敗了人類可讀的slu whole的全部目的。 – 2010-02-23 18:48:01
@克雷格這似乎很合理。除了維護帶有*可移動字符的字典之外,還有一些內置的框架可以讓我輕鬆地對這些URL或者某些第三方API進行編碼? – 2010-02-23 18:49:45
關於我的頭頂,我不知道。 – 2010-02-23 20:24:51