Как правильно кодировать якорные ссылки - PullRequest
4 голосов
/ 23 февраля 2010

Как правильно кодировать 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, поэтому я предполагаю, что здесь происходит какая-то особенная вещь, и я ищу лучшие практики.

1 Ответ

2 голосов
/ 24 февраля 2010

Я делаю это таким образом , взято из того, что Джефф Этвуд использует для переполнения стека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...