我正在为客户的主页创建一个动态的产品列表,我在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
有关如何解决此问题的任何想法?
答案 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处理所有网址