2010-02-23 92 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