有特殊字符的問題這不是一個新的 queestion的Internet Explorer具有查詢字符串
有相當多的問題,在這裏SO關於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
現在很容易看出問題所在。 火狐&鉻的URL編碼的URL
的 十六進制值字節......每次不是一個ASCII字母或數字,以%HH,其中HH是字節
Internet Exlorer改爲對字符串進行直接的UTF-8編碼,從而導致「Ã|blegrød」。這也是一樣的最終結果,如果你採用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
被髮送到服務器。
這是我的配置如何:
- 文件保存爲UTF-8
我設置meta標籤:
<meta charset="UTF-8">
IE發送URL路徑作爲UTF-8(還設置IE爲 爲內聯網querystrings做這個)
全球化設置爲UTF-8
<globalization uiCulture="da-DK" culture="da-Dk" fileEncoding="utf-8" responseEncoding="utf-8" requestEncoding="utf-8" responseHeaderEncoding="utf-8" />
我運行的想法,我不知道它是什麼,我做錯了。我傾向於IE製造破壞,但我真的不知道這是我在我的項目中錯誤地設置的東西。
您遇到的問題是許多IE版本的已知問題,其中包括11.請參見[IE11的URL更改中的Unicode](http://blogs.msdn.com/b/ieinternals/archive/2014/04/) 22/internet-explorer-11-unicode-utf8-url-query-string-international.aspx)和[在IE10中查詢字符串參數的編碼](http://stackoverflow.com/questions/18220057/)。 –
當被視爲ISO-8859-1時,''Ã|blegrød''是'æblegrød'的UTF-8編碼形式。 IE正在正確地將查詢字符串編碼爲UTF-8,它只是按原樣發送UTF-8(很可能是因爲您的HTML頁面的字符集是UTF-8),而不是在'%HH中對非ASCII字節八位字節進行十六進制編碼'格式,就像其他瀏覽器一樣。 –
此問題可能與IE提交HTML表單的方式有關,如此MSDN博客文章中所述:[Brain Dump:International Text](http://blogs.msdn.com/b/ieinternals/archive/2012/07/13 /internet-explorer-and-international-text-encoding-unicode-punycode-ansi-oh-my.aspx)。注意:「* IE中的URL一次最多可以使用三種不同的編碼:主機名中的punycode,路徑中的%轉義的UTF-8以及查詢的原始代碼頁-ANSI **和片段這顯然是一團糟,但修正它以符合IRI規範會導致兼容性成本(相信我,我們已經嘗試過!)*「。 –