Как правильно кодировать URL-адреса в тегах привязки в документе XHTML / Strict:
<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>
<% } %>
Ответ может также состоять в том, чтобы просто избегать этих символов в URL для целей SEO. Если бы это было так, я бы просто избегал их, но мне было просто интересно, как CMS и блоги справляются с этим.
Например, в SO вопросе заголовок, такой как a/b
будет отображаться как a-b
в привязке href, поэтому я предполагаю, что здесь происходит какая-то особенная вещь, и я ищу лучшие практики.