这不是一个新问题
这里有很多关于 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
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
被发送到服务器。
我的配置是这样的:
<meta charset="UTF-8">
为 Intranet 查询字符串执行此操作)
<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/