如何处理ASP.NET HyperLink.NavigateUrl中的特殊字符?

时间:2009-03-09 13:34:34

标签: asp.net character-encoding hyperlink navigateurl

我目前正在弄清楚如何处理文件路径(动态地)传递给HyperLink控件的NavigateUrl属性。

假设我正在尝试在jäynä.txt的根目录中引用名为C:的文件。
"file:///C:/jäynä.txt"结果传递给指向file:///C:/jäynä.txt的链接,HttpUtility.UrlPathEncode("file:///C:/jäynä.txt")也是如此。

ä **替换为** %E4 ,其中包含字符串"file:///C:/j%E4yn%E4.txt",确实为file:///C:/jäynä.txt提供了工作链接,但我没有找到一种方法来替换,而不是自己定义。以Replace("ä", "%E4")为例。

有没有办法自动处理文件路径字符串,以便HyperLink能正确显示它,而无需手动列出字符串中要替换的字符?

附加说明:
可能有一种方法可以解决这个问题,因为调试显示了呈现页面的字符编码,因为调试显示HyperLink至少保存字符串"file:///C:/jäynä.txt"不变,但不知怎的,它会在某种程度上破坏它渲染。
但是,这似乎只是渲染NavigateUrl的情况,因为其他组件以及HyperLink的{​​{1}} - 属性都能够呈现字符 {{ 1}} 不变。

4 个答案:

答案 0 :(得分:4)

超链接的NavigateUrl属性将对网址中的unicode字符进行编码。

相反,您可以像这样设置超链接的href属性:

hyperlink1.Attribute("href") = "file:///C:/jäynä.txt"

答案 1 :(得分:1)

这是由于浏览器开始解释路径的方式,通常个人会避免使用页面网址中的字符。

在您的情况下,我相信您已经找到了最好的情况,因为我不知道有任何方法可以改变HttpUtility和/或NavigateUrl属性的行为。至少没有为它创建自定义控件。

答案 2 :(得分:1)

不要使用HyperLink控件。而是使用HtmlAnchor控件。它会解决你的问题。我不知道为什么微软会这样设计。

答案 3 :(得分:0)

谢谢! 使用'属性'的帖子解决了我的问题。就我而言,它是

HyperLink6.Attributes["href"] = "http://høgstedt.danquah.dk/";

在网址中使用特殊丹麦字符的问题似乎一直困扰着很多程序员 - 搜索提供了一些非常复杂的方法。这个很简单,而且很简单。 再一次,谢谢你