这不是新问题
这里有很多问题关于IE在查询字符串中处理特殊字符时遇到一些问题。在所有情况下它都是相同的:Chrome,Firefox,Safari(每个人)正确处理UTF-8编码的URL,几乎所有这些URL甚至可以处理IRI未编码为URL的情况。但IE坚持要让开发人员过上艰难的生活。
因为我自己遇到了这个问题,并且已经有了很多工作。对我来说,似乎IE出于某种原因坚持在将UTF-8编码的URL发送到服务器之前将其解码为ISO-8859-1。
我的案例
我是丹麦的居民,因此我必须使用丹麦语字母æøå。 在很多情况下,我想将视图中的参数发送到一些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是对网址进行编码的网址
...每个字节不是ASCII字母或数字到%HH,其中HH是 字节的十六进制值
其中Internet Exlorer正在对字符串执行直接的UTF-8编码,从而产生“Ã||||”。这也是一样的最终结果,就好像你接受一个UTF-8字符串并将其解码为ISO-8859-1一样,这是巧合吗?
我尝试了一些事情
由于Internet Explorer可以选择“将URL路径发送为UTF-8”,我尝试禁用它。什么都不改变。
当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">
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造成破坏,但我真的不知道这是否是我在我的项目中错误设置的。
答案 0 :(得分:4)
未来人们回答这个问题的答案。
解决这个问题,我得出的结论是,我唯一能做的就是对我的所有网址进行编码,然后使用内容处理(with help from this SO post)使其适用于不同的浏览器。解决方案并不完美,但仍存在一些缺陷,但这是迄今为止我发现的最佳方法。
在我的所有情况下,链接都是使用JS构建的,因此encodeURIComponent是我对URL进行编码的首选方法。