【问题标题】:Special characters replaced on URL替换 URL 上的特殊字符
【发布时间】:2012-02-21 10:41:39
【问题描述】:

我正在为客户的主页创建一个动态的产品列表,我在 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

关于如何解决这个问题的任何想法?

【问题讨论】:

    标签: asp.net internet-explorer url encode


    【解决方案1】:

    这是设计使然。

    URL 可以包含一组ASCII characters only。 ASCII 以外的任何字符都在内部进行百分比编码。

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

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

    【讨论】:

    • 我使用的是 IE8。但浏览器不会对 url 进行百分比解码。
    • @Cpt 如果我将http://www.iana.org/domains/example/£óñ 粘贴到 IE8 中,则字符会保持原样。你在哪里看网址?在位置栏中?你有活生生的例子吗?
    • 如果我手动将百分比代码更改为特殊字符,一切正常。该错误似乎发生在列表的构建过程中。这是一个示例:[链接]motocard.com/sp/productsmoto/renthal/…。查看列表的链接
    • @Cpt 确实如此。 Chrome 正在将其转换为ñ,但 IE8 不是。尽管它可以处理直接输入的特殊字符,但它似乎无法将字符解析回来,我只是在另一个网站上尝试过,它正在做同样的事情。那么我关于 IE8 能够处理这个问题的信息是错误的。
    • 我内心的某种东西告诉我,IE8 是唯一对此负责的。无论如何,谢谢你的时间!我将做一些研究并尝试解决它。如果我能解决这个奇怪的问题,我会告诉你
    【解决方案2】:

    我终于设法解决了特殊字符问题。我在网站上做了一些更改。我已经用

    替换了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 处理所有 URL

    【讨论】:

      猜你喜欢
      • 2010-10-06
      • 2014-11-03
      • 2011-12-28
      • 1970-01-01
      • 2013-03-08
      • 2012-11-16
      • 2019-09-23
      相关资源
      最近更新 更多