Как Stackoverflow экранирует имена тегов в URL - PullRequest
2 голосов
/ 07 марта 2009

Я хочу создать URL из имени тега.

На мой взгляд (asp.net mvc) у меня есть следующее:

<%= Html.ActionLink(Html.Encode(tagName), 
"tagged" //action, 
"posts" //controller, 
new {tagName=Html.UrlEncode(tagName)} //querystring argument, 
new {@class="tag"} //html attributes) 
%>

Но это генерирует следующий URL, если tagName является "c #" (без кавычек):

http://localhost/posts/tagged/c%2523

, что приводит к ошибке Http 400 - неверный запрос

В Stackoverflow URL для того же тега "c #" генерирует "c% 23" вместо "c% 2523"

Я пробовал Html.UrlEncode, Uri.EscapeDataString, Uri.EscapeUrlString, но ни один из них не дает желаемый формат "c% 23".

Так как мне кодировать tagName для якоря?

Ответы [ 4 ]

4 голосов
/ 07 марта 2009

Похоже, что вы делаете две кодировки вашего URL, поскольку c% 2523 является закодированным значением для c% 23. (0x23 = ASCII 35 = #, 0x25 = ASCII 37 =%). Поскольку у вас есть два вызова кодирования (Html.Encode и Html.UrlEncode), возможно, удаление одного из них устранит вашу проблему.

0 голосов
/ 07 марта 2009
<%= Html.ActionLink(Html.Encode(tagName), 
"tagged" //action,  
"posts" //controller, 
new {tagName=Html.UrlEncode(tagName)} //querystring argument, 
new {@class="tag"} //html attributes) 
%>

Html.ActionLink создает HTML и решает проблемы с выходом за вас. Вы не должны явно Html.Encode текста ссылки или Html.UrlEncode параметра.

Если ‘#’ в значении параметра не экранируется, это похоже на ошибку в ActionLink () и вам, возможно, придется сгенерировать ссылку самостоятельно.

0 голосов
/ 07 марта 2009

Если я правильно запомнил, то actionlink автоматически закодирует значения в URL, поэтому просто удалите Html.Encode (tagName), и он должен выглядеть красиво.

0 голосов
/ 07 марта 2009

# соответствует значению ascii 23 в шестнадцатеричном формате. Поэтому я думаю, что они используют шестнадцатеричное значение.

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