2015-10-28 89 views
2

有特殊字符的問題這不是一個新的 queestion的Internet Explorer具有查詢字符串

有相當多的問題,在這裏SO關於IE有一些問題在查詢字符串處理特殊字符。在所有情況下都是一樣的:Chrome,Firefox,Safari(所有人)都能正確處理UTF-8編碼的URL,幾乎所有這些URL都能處理IRI未編碼到URL中的情況。但IE堅持要讓開發人員生活艱難。

由於我自己遇到了這個問題,並且對它有很大的幫助。對我來說,IE似乎由於某種原因堅持在將UTF-8編碼的URL發送到服務器之前解碼爲ISO-8859-1。

我的情況下

我在丹麥的居民,併爲此我要工作與丹麥字母æøå。 在很多情況下,我想從我的視圖發送參數到一些C#方法。這樣的地方,特殊字符經常彈出的兩個例子:

  1. 搜索
  2. 規範文件名的下載文件

說丹麥人想要搜索丹麥字「æ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是字節

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

的 十六進制值字節

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 

被髮送到服務器。

這是我的配置如何:

  1. 文件保存爲UTF-8
  2. 我設置meta標籤:

    <meta charset="UTF-8"> 
    
  3. IE發送URL路徑作爲UTF-8(還設置IE爲 爲內聯網querystrings做這個)

  4. 全球化設置爲UTF-8

    <globalization   
        uiCulture="da-DK" 
        culture="da-Dk" 
    
        fileEncoding="utf-8" 
        responseEncoding="utf-8" 
        requestEncoding="utf-8" 
        responseHeaderEncoding="utf-8" /> 
    

我運行的想法,我不知道它是什麼,我做錯了。我傾向於IE製造破壞,但我真的不知道這是我在我的項目中錯誤地設置的東西。

+0

您遇到的問題是許多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/)。 –

+1

當被視爲ISO-8859-1時,''Ã|blegrød''是'æblegrød'的UTF-8編碼形式。 IE正在正確地將查詢字符串編碼爲UTF-8,它只是按原樣發送UTF-8(很可能是因爲您的HTML頁面的字符集是UTF-8),而不是在'%HH中對非ASCII字節八位字節進行十六進制編碼'格式,就像其他瀏覽器一樣。 –

+2

此問題可能與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規範會導致兼容性成本(相信我,我們已經嘗試過!)*「。 –

回答

3

答案是未來的人打這個問題。

玩弄這個,我得出的結論是,我唯一能做的就是編碼我所有的URL,然後使用Content Disposition(with help from this SO post)使它適用於不同的瀏覽器。解決方案並不完美,但仍然存在一些缺陷,但這是迄今爲止我發現的最好方法。

在我所有的情況下,鏈接都是用JS構建的,所以encodeURIComponent是我編碼URL的首選方法。

相關問題