URL上替换了特殊字符

时间:2012-02-21 10:41:40

标签: asp.net internet-explorer url encode

我正在为客户的主页创建一个动态的产品列表,我在IE8中发现了一个非常烦人的问题。

产品的URL使用以下结构构建:

http://www.domain.com/language/category/product_name.aspx

当我以西班牙语显示网站并且该类别包含特殊字符"ñ"时,会出现问题:IE将该字符替换为"%c3%b1"

根据我的代码,我发现URL构建正确,但是当服务器显示结果页面时,所有包含特殊字符的URL都已被替换。

aspx页面有控件:

<asp:HyperLink ID="LinkTitle" runat="server">Product Name</asp:HyperLink>

并且类后面的代码在ListView的ItemDataBound事件期间将值赋给控件

Dim L_LinkTit As HyperLink    
Dim Link as String
L_LinkTit = LstView.FindControl("LinkTitle")

Link = "/" & Session("lang") & "/" & cat & "/" & product & ".aspx"
L_LinkTit.NavigateUrl = Link

有关如何解决此问题的任何想法?

2 个答案:

答案 0 :(得分:5)

这是设计的。

网址可以包含一组ASCII characters only。除ASCII之外的任何字符都是内部百分比编码。

现代浏览器,搜索引擎等会在显示之前对网址进行百分比解码(因此看起来更好),但在内部,UTF-8ñ始终为%c3%b1。 IE8显然不会这样做,所以如果你想提供正确的URL,就没有办法让它们在IE8中看起来不错。

有关背景信息,请参阅Unicode characters in URLs

答案 1 :(得分:0)

最后,我设法解决了特殊字符问题。我在网站上做了一些更改。我用

替换了aspx页面的asp HyperLink控件
<a id="LinkTitle" runat="server">Product Name</a>

现在背后的代码有点不同

Dim ProdLNK As HtmlAnchor
Dim Link as String
ProdLNK = LstView.FindControl("LinkTitle")

Link = "/" & Session("lang") & "/" & cat & "/" & product & ".aspx"
ProdLNK.HRef = Link

现在IE8处理所有网址