10

我有这样的动作:

<%=Html.ActionLink("My_link", "About", "Home", new RouteValueDictionary { 
    { "id", "Österreich" } }, null)%>

这会产生以下链接:http://localhost:1855/Home/About/%C3%96sterreich

我想要一个看起来像这样的链接 - localhost:1855/Home/About/Österreich

我试过了。

Server.HtmlDecode("Österreich")
HttpUtility.UrlDecode("Österreich") 

两者似乎都没有帮助。我还能尝试什么来获得我想要的结果?

4

4 回答 4

4

我认为这是您的浏览器 (IE) 的问题。

您的代码是正确的,不需要明确的 UrlEncoding。

<%=Html.ActionLink("My_link", "About", "Home", new RouteValueDictionary { 
{ "id", "Österreich" } }, null)%>

ASP.NET MVC 没有任何问题。在 IE 和处理 unicode 的浏览器中查看网络上的 unicode url,例如http://he.wikipedia.org/wiki/%D7%9B%D7%A9%D7%A8%D7%95%D7%AA网址正确。

例如,chrome 显示 unicode URL 没有任何问题。IE 不解码地址栏中的“特殊”Unicode 字符。

这只是一个外观问题。

于 2010-04-09T18:46:12.773 回答
2

根据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 用于表示 Internet 协议中使用的八位字节序列。例如,在 ftp 方案中,主机名、目录名和文件名就是这样的八位字节序列,由 URL 的一部分表示。在这些部分中,一个八位字节可以由一个字符表示,该字符在 US-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 编码字符集。US-ASCII不使用八位字节80-FF十六进制,八位字节00-1F和7F十六进制表示控制字符;这些必须被编码。

于 2010-04-09T18:46:34.393 回答
1

我认为您对非 urlencode url 的渴望是有效的,但我认为这些工具实际上并不能轻松做到这一点。

于 2010-04-09T18:36:23.027 回答
0

将生成的链接放在 中<a>,链接文本是非编码字符串,是否不够好?它在浏览器的 URL 字段中看起来仍然很糟糕,但是您的 UI 会更漂亮一些。

此外,无论如何,在 Firefox 中,当我将鼠标悬停在您的“丑陋”链接上时,状态栏中显示的 URL 会显示未编码的版本,因此在那里看起来也可能很好。

于 2010-04-09T18:44:42.943 回答