Asp.net mvc url decode
-
25-09-2019 - |
Вопрос
У меня есть как это действие:
<%=Html.ActionLink("My_link", "About", "Home", new RouteValueDictionary {
{ "id", "Österreich" } }, null)%>
Это производит следующую ссылку: http: // localhost: 1855 / Главная / О нас /% C3% 96 sterreich
Я хочу ссылку, которая выглядит так - localhost: 1855 / Главная / О / тельзере
Я пытался.
Server.HtmlDecode("Österreich")
HttpUtility.UrlDecode("Österreich")
Ни один, кажется, не помогает. Что еще я могу попытаться получить желаемый результат?
Решение
Я думаю, что это проблема с вашим браузером (т.е.).
Ваш код правильный, как оно не требуется явного URLENCoding.
<%=Html.ActionLink("My_link", "About", "Home", new RouteValueDictionary {
{ "id", "Österreich" } }, null)%>
Нет ничего плохого в asp.net mvc. Смотрите URL Unicode в Интернете, например http://he.wikipedia.org/wiki/%D7%9B%D7%A9%D7%A8%D7%95%D7%AA В IE и в браузере, который обрабатывает Unicode в URL-адреса правильно.
Например, Chrome отображает URL Unicode без проблем. Т.е. не декодирует «специальные» символы Unicode в адресной строке.
Это только косметическая проблема.
Другие советы
Согласно с RFC 1738 Однородные локаторы ресурсов (URL), Поддерживается только US-ASCII, все остальные символы должны быть закодированы.
2.2. URL Character Encoding Issues URLs are sequences of characters, i.e., letters, digits, and special
персонажи. URL-адреса могут быть представлены различными способами: например, чернила на бумаге или последовательность октетов в кодированном наборе символов. Интерпретация URL зависит только от идентификатора используемых используемых символов.
In most URL schemes, the sequences of characters in different parts of a
URL используются для представления последовательностей октетов, используемых в интернет-протоколах. Например, в FTP-схеме имени хоста, имя каталога и имена файлов являются такими последовательностями октетов, представленных частями URL. В пределах этих частей октет может быть представлен ChraRAter, который имеет этот октет в качестве кода в рамках набора символов ASCII [20].
In addition, octets may be encoded by a character triplet consisting of
Персонаж «%», а затем два шестнадцатеричных цифры (от «0123456789ABCDEF»), которые образуют шестнадцатеричное значение октета. (Символы «ABCDEF» также могут быть использованы в шестнадцатеричных кодировках.)
Octets must be encoded if they have no corresponding graphic
Персонаж в виде закодированного набора символов US-ASCII, если использование соответствующего символа небезопасна, или если соответствующий символ зарезервирован для некоторой другой интерпретации в рамках определенной схемы URL.
No corresponding graphic US-ASCII: URLs are written only with the graphic printable characters of the
US-ASCII кодированный набор символов. Октеты 80-FF шестнадцатеричные не используются в US-ASCII, а октеты 00-1f и 7F шестнадцатеричные представляют собой контрольные символы; Они должны быть закодированы.
Я думаю, что ваше желание URL URLENCODE является действительным, но я не думаю, что инструменты на самом деле облегчают это сделать.
Положил бы сгенерированную ссылку внутри <a>
, С помощью текста ссылки некодируемая строка, не быть достаточно хорошей? Это все равно выглядело бы плохо в поле URL браузера, но ваш интерфейс будет немного красивее.
Кроме того, в Firefox в любом случае, URL-адрес, показанный в моем полосе состояния, когда мы наведите курсор на вашу «уродливую» ссылку, показывает донечную версию, поэтому она также будет хорошо выглядеть там.