如何正确编码锚点hrefs

时间:2010-02-23 18:33:56

标签: asp.net asp.net-mvc

在XHTML / Strict文档中对锚标记中的URL进行编码的正确方法是什么:

<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 Bad Request。

我把它放在同一页面上以测试id参数是否正确传递:

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

答案也可能是为了SEO目的而简单地避免网址中的这些字符。如果是这种情况我会简单地避免它们,但我很好奇CMS和博客如何处理这个问题。

例如关于SO问题标题,例如a/b会在锚点href中呈现为a-b,所以我猜这里有一些自定义的东西,我正在寻找最佳实践。

1 个答案:

答案 0 :(得分:2)

我这样做this way,从Jeff Atwood用于Stack Overflow的东西中获取。