url 中文傳參 亂碼問題

2022-08-27 20:33:15 字數 1851 閱讀 9275

開發一直用firfox網頁,除錯什麼的都很方便。所以遇到了瀏覽器之間的相容問題。url中文傳參。

問題:前台用url傳值中文,後台用request.getparameter接收引數。

用firfox,chrome等沒有問題。用ie會出現接參亂碼現象。

上網查了一下,算了,還是把原文帖上來吧。比較容易懂。

讓jsp正確解釋含有中文的url以及傳遞中文引數是乙個很有用的特性,也是比較複雜的。我去年的乙個小專案中就碰到了在url中傳遞中文引數的問題,但是當時由於對jsp還不是很熟悉,所以沒有解決這個問題因而捨棄了一部分功能。

但是,這個問題確實得解決,因為在即將展開的乙個專案中肯定得用它。於是,今天花了一天的時間來研究這個問題,好在功夫不負有心人,現在問題終於解決了。下面就做一下介紹:

ie、firefox、opera三種瀏覽器對url的傳輸的處理各不相同,瀏覽器在傳輸url時得對url進行編碼,ie預設是以utf-8來傳輸的,opera可能也是以utf-8編碼的,firefox經過測試肯定不是以utf-8來編碼的,有可能是以iso-8859-1來編碼的。所以如果不對中文進行處理,那麼中文字元經各個瀏覽器以自己的編碼方式傳輸到伺服器後就出現了各種編碼方式,而伺服器卻只能以一種編碼方式來對接收到的url進行解碼。這樣的話,和伺服器使用的編碼方式一樣的瀏覽器在使用帶中文的url時不會出現問題,其他的瀏覽器則會出現問題。

所以解決的辦法就是在url進行傳輸之前對其中的中文進行編碼,使用的編碼是和伺服器一樣的編碼,假設伺服器使用的編碼是utf-8,則編碼語句如下:urlencoder.encode("中文","utf-8")。這樣對中文進行編碼後所有的瀏覽器都不會再用他們預設的編碼方式對中文進行編碼,因為此時瀏覽器看到的已經不是中文了,而是編碼後的位元組碼。這樣就避開了瀏覽器傳輸url時編碼的差異性問題。

對中文引數問題的解決方式和上面一樣。但這裡所指的中文引數是指以?name="中文引數"方式附在url後,以get方法傳輸到伺服器的這種形式,並不是以表單形式提交到伺服器的。各瀏覽器對中文引數的處理方式和各自對url中中文的處理方式都不相同,各瀏覽器之間也有差異,有的在傳輸之前不進行編碼,有的在傳輸之前就已經進行了編碼,情形非常複雜。

但是我們以不變應萬變,都用urlencoder.encode("中文","utf-8")對中文引數進行編碼,這樣不管各瀏覽器怎樣對中文引數進行處理,此時經過我們編碼後的中文對瀏覽器來說就是位元組碼,與a、b、c等字母沒有什麼區別。但是伺服器會用utf-8編碼形式來還原中文引數。

總結一下:以tomcat伺服器為例,在中新增uriencoding="utf-8",設定tomcat以utf-8的編碼方式來處理url。其次,對url中的中文和中文引數都用urlencoder.encode("中文","utf-8")進行編碼。

再有,就是在後台進行轉碼。

點選後開啟新頁面,使用者登入!使用者名為中文時,火狐、google瀏覽器無問題,但ie有亂碼問題:

方法三: 

如果用jstl的話,可以自己寫乙個el的function,呼叫urlencoder.encode來編碼。

ie預設對url後面的引數是不編碼傳送的,但是tomat預設是按iso8859-1來進行url解碼,因此才會出現上述錯誤。好的做法是:

1、在url引數中確保用utf-8編碼之,方法可以用js函式encodeuri(),或呼叫自定義的el function;

2、設定server.xml中的connector熟悉uriencoding="

utf-8

",確保解碼格式與編碼格式統一;

方法四:

在action中,string s=request.getparameter("s"

); s=new string(s.getbytes("

iso-8859-1

"),"

gbk");

C Http請求中文傳參亂碼問題

c http網路訪問中,如果url中含有中文引數不加以處理,則會出現訪問失敗,返回400錯誤。我們必須把含有中文的引數轉換為url編碼 中文自動轉 xx,英文數字等其它不會變 轉換後乙個漢字對應三組 xx,即 xx xx xx。url編碼輸入必須是utf8編碼。例子 轉換前測試ue 轉換後 e6 b...

URL上中文傳參亂碼解決方案

一開始使用encoder string str 進行編碼和decoder string str 進行解碼,結果依然發現頭痛的亂碼。後來再使用encoder string str,utf 8 進行編碼和decoder string str,utf 8 進行解碼。亂碼問題才得以解決。為了測試encode...

URL上中文傳參亂碼解決方案

一開始使用encoder string str 進行編碼和decoder string str 進行解碼,結果依然發現頭痛的亂碼。後來再使用encoder string str,utf 8 進行編碼和decoder string str,utf 8 進行解碼。亂碼問題才得以解決。為了測試encode...