这不是一个new问题
这里有很多关于 IE 在处理查询字符串中的特殊字符时遇到问题的问题。在所有情况下都是相同的:Chrome、Firefox、Safari(每个)都可以正确处理 UTF-8 编码的 URL,几乎所有这些甚至都可以处理 IRI 未编码到 URL 中的情况。但IE却坚持让开发者日子不好过。
因为我自己也遇到过这个问题,并且为此做了很多工作。在我看来,IE 出于某种原因坚持将 UTF-8 编码的 URL 解码为 ISO-8859-1,然后再将其发送到服务器。
My case
我是丹麦居民,因此我必须使用丹麦语字母 æøå。
在很多情况下,我想将参数从我的视图发送到某些 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 编码
...不是 %HH 的 ASCII 字母或数字的每个字节,其中 HH 是
字节的十六进制值
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 以 UTF-8 形式发送 URL 路径(也将 IE 设置为
对 Intranet 查询字符串执行此操作)
-
全球化设置为 UTF-8
<globalization
uiCulture="da-DK"
culture="da-Dk"
fileEncoding="utf-8"
responseEncoding="utf-8"
requestEncoding="utf-8"
responseHeaderEncoding="utf-8" />
我已经没有想法了,我不知道我做错了什么。我倾向于 IE 造成严重破坏,但我真的不知道这是否是我在项目中设置错误的东西。