.net - Internet Explorer 在查询字符串中遇到特殊字符问题

标签 .net internet-explorer url encoding utf-8

这不是一个新问题

这里有很多关于 IE 在处理查询字符串中的特殊字符时遇到问题的问题。在所有情况下都是一样的:Chrome、Firefox、Safari(每个人)都正确处理了 UTF-8 编码的 URL,几乎所有这些甚至都处理了 IRI 未编码为 URL 的情况。但 IE 坚持让开发者过得艰难。

因为我自己遇到了这个问题,并且已经解决了很多问题。对我来说,IE 似乎出于某种原因坚持将 UTF-8 编码的 URL 解码为 ISO-8859-1,然后再将其发送到服务器。

我的案例

我是丹麦的居民,因此我必须使用丹麦字母 æøå。
在很多情况下,我想将 View 中的参数发送到某些 C# 方法中。特殊字符经常出现的地方的两个例子:

  • 搜索
  • 下载文件的文件名规范

  • 假设丹麦人想要搜索丹麦语单词“æblegrød”(一种特殊的苹果派)。在 Chrome 和 Firefox 中,如果我只是用 IRI 提供给浏览器:
    http://example.com/Search/QuickSearch?searchQuery=æblegrød
    

    发送到服务器的查询如下所示:
    http://example.com/Search/QuickSearch?searchQuery=%C3%A6blegr%C3%B8d
    

    然而,在 Internet Explorer 中,它看起来像这样:
    http://example.com/Search/QuickSearch?searchQuery=æblegrød
    

    现在很容易看出问题所在。
    Firefox 和 Chrome 是 URL 编码的 URL

    ... each byte that is not an ASCII letter or digit to %HH, where HH is the hexadecimal value of the byte

    http://www.w3.org/International/O-URL-code.html



    Internet Exlorer 对字符串进行直接的 UTF-8 编码,结果是“Ã|blegrød”。这也与您采用 UTF-8 字符串并将其解码为 ISO-8859-1 的最终结果相同,这是巧合吗?

    我尝试了一些东西

    由于 Internet Explorer 可以选择“以 UTF-8 格式发送 URL 路径”,因此我尝试禁用它。什么都不改变。

    由于 IE 必须处理“searchQuery=æblegrød”时出错,我尝试在将 IRI 交给浏览器之前对其进行编码。导致所有浏览器都使用以下 URL:
    http://example.com/Search/QuickSearch?searchQuery=%C3%A6blegr%C3%B8d
    

    但是 IE 不在乎,我在网络日志中看到的仍然是 URL
    http://example.com/Search/QuickSearch?searchQuery=æblegrød
    

    被发送到服务器。

    我的配置是这样的:
  • 文件保存为 UTF-8
  • 我设置了元标记:
    <meta charset="UTF-8">
    
  • IE 将 URL 路径作为 UTF-8 发送(也将 IE 设置为
    为 Intranet 查询字符串执行此操作)
  • 全局化设置为 UTF-8
    <globalization          
        uiCulture="da-DK"
        culture="da-Dk"
    
        fileEncoding="utf-8"
        responseEncoding="utf-8"
        requestEncoding="utf-8"
        responseHeaderEncoding="utf-8" />
    

  • 我的想法不多了,我不知道我做错了什么。我倾向于 IE 造成破坏,但我真的不知道这是否是我在我的项目中设置错误的东西。

    最佳答案

    回答 future 的人遇到这个问题。

    玩弄这个,我得出的结论是,我唯一能做的就是对我所有的 URL 进行编码,然后使用 Content Disposition ( with help from this SO post ) 使其适用于不同的浏览器。该解决方案并不完美,它仍然存在一些缺陷,但它是我迄今为止找到的最佳方法。

    在我的所有案例中,链接都是用 JS 构建的,所以 encodeURIComponent是我对 URL 进行编码的首选方法。

    关于.net - Internet Explorer 在查询字符串中遇到特殊字符问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33391124/

    相关文章:

    javascript - 从 Javascript 函数加载和引用 DOM 元素

    javascript - InDesign 中具有可变 URL 的 Web 链接按钮

    .net - 打开和关闭多个驱动器

    c# - 某些重载的构造函数能否显示某些重载的方法?

    c# - .NET Multiline TextBox - 设置行数

    javascript - 使用 jQuery 无法动态添加多个元素

    javascript - 删除 Internet Explorer 中的事件监听器

    php - META REFRESH 调用 javascript 返回(在历史中)但需要将变量发送到该脚本。

    php - 需要一个正则表达式来匹配文本中包含/不包含 http ://or www. 或 http ://www. 的 URL

    c# - 从 C# 中不断增长的文件中读取?