jspurl中中文參數(shù)的亂碼解決_第1頁
jspurl中中文參數(shù)的亂碼解決_第2頁
jspurl中中文參數(shù)的亂碼解決_第3頁
jspurl中中文參數(shù)的亂碼解決_第4頁
全文預覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、form有2中方法把數(shù)據(jù)提交給服務(wù)器,get和post,分別說下吧。(一)get提交1.首先說下客戶端(瀏覽器)的form表單用get方法是如何將數(shù)據(jù)編 碼后提交給服務(wù)器端的吧。對于get方法來說,都是把數(shù)據(jù)串聯(lián)在請求的url后面作為參數(shù),如: http:/localhost:8080/servlet?msg=abc(很常見的一個亂碼問題就要出現(xiàn)了,如果 url中出現(xiàn)中文或其它特殊 字符的話,如:http:/localhost:8080/servlet?msg= 杭州,服務(wù)器端容易 得到亂碼),url拼接完成后,瀏覽器會對 url進行URL encode ,然后 發(fā)送給服務(wù)器,URL enco

2、de的過程就是把部分url做為字符,按照某 種編碼方式(如:utf-8,gbk等)編碼成二進制的字節(jié)碼,然后每個字節(jié) 用一個包含3個字符的字符串"xy”表示,其中xy為該字節(jié)的兩位十 六進制表示形式。我這里說的可能不清楚,具體介紹可以看下 .URLEncoder 類的介紹在這里。了解了 URL encode的過程, 我們能看到2個很重要的問題,第一:需要URL encode的字符一般都 是非ASCII的字符(籠統(tǒng)的講),再通俗的講就是除了英文字母以外的 文字(如:中文,日文等)都要進行 URL encode ,所以對于我們來說, 都是英文字母的url不會出現(xiàn)服務(wù)器得到亂碼問題,出現(xiàn)亂

3、碼都是url里面帶了中文或特殊字符造成的;第二: URL encode到底按照那種編 碼方式對字符編碼?這里就是瀏覽器的事情了,而且不同的瀏覽器有不同的做法,中文版的瀏覽器一般會默認的使用GBK,通過設(shè)置瀏覽器也可以使用UTF-8 ,可能不同的用戶就有不同的瀏覽器設(shè)置,也就造成不同的編碼方式,所以很多網(wǎng)站的做法都是先把url里面的中文或特殊字符用javascript做URL encode ,然后再拼接url提交數(shù)據(jù),也就是替 瀏覽器做了 URL encode ,好處就是網(wǎng)站可以統(tǒng)一 get方法提交數(shù)據(jù)的 編碼方式。完成了 URL encode ,那么現(xiàn)在的url就成了 ASCII范圍內(nèi)的字符了

4、,然后以iso-8859-1的編碼方式轉(zhuǎn)換成二進制隨著請求頭一起 發(fā)送出去。這里想多說幾句的是,對于 get方法來說,沒有請求實體, 含有數(shù)據(jù)的url都在請求頭里面,之所以用 URL encode ,我個人覺的 原因是:對于請求頭來說最終都是要用iso-8859-1編碼方式編碼成二進 制的101010.的純數(shù)據(jù)在互聯(lián)網(wǎng)上傳送,如果直接將含有中文等特殊 字符做iso-8859-1編碼會丟失信息,所以先做 URL encode是有必要 的。2。服務(wù)器端(tomcat)是如何將數(shù)據(jù)獲取到進行解碼的。第一步是先把數(shù)據(jù)用iso-8859-1進行解碼,對于get方法來說,tomcat 獲取數(shù)據(jù)的是ASCI

5、I范圍內(nèi)的請求頭字符,其中的請求 url里面帶有參 數(shù)數(shù)據(jù),如果參數(shù)中有中文等特殊字符,那么目前還是URL encode后的XY狀態(tài),先停下,我們先說下開發(fā)人員一般獲取數(shù)據(jù)的過程。通 常大家都是request.getParameter("name") 獲取參數(shù)數(shù)據(jù),我們在 request對象或得的數(shù)據(jù)都是經(jīng)過解碼過的,而解碼過程中程序里是無 法指定,這里要說下,有很多新手說用request.setCharacterEncoding(" 字符集”)可以指定解碼方式,其實是不可以的,看 servlet的官方API說明有對止匕方法的解釋: Overrides the n

6、ame of the character encoding used in the body of this request. This method must be called prior to可以reading request parameters or reading input using getReader().看出對于get方法他是無能為力的。那么到底用什么編碼方式解碼數(shù)據(jù) 的呢,這是tomcat的事情了,默認缺省用的是iso-8859-1,這樣我們就 能找到為什么get請求帶中文參數(shù)為什么在服務(wù)器端得到亂碼了,原因 是在客戶端一般都是用 UTF-8或GBK對數(shù)據(jù)URL enco

7、de ,這里用 iso-8859-1方式URL decoder顯然不行,在程序里我們可以直接Java代碼new String(request.getParameter("name").getBytes("iso-8859-1"),"客戶端指定的URL encode編碼方式")new String(request.getParameter("name").getBytes("iso-8859-1"),"客戶端指定的URL encode編碼方式")還原回字節(jié)碼,然后用正確的方式解

8、碼數(shù)據(jù),網(wǎng)上的文章通常是在tomcat里面做個配置本人的解決方法:在js中將參數(shù)進行編碼<td class="bg3" width="9%”><ahref="javascript:goToPage('$cmd.cusCode','$currentYear','$curre ntMonth','$cmd.cusName')"><fmt:message key="button.enter"/></a></td><script language="javascript" type="text/javascript">functiongoToPage(cusCode,currentYear,currentMonth,cusName)var url="checkCityInvUpload.do?method=checkCityInvUploadDetail&cusCod e=" + cusCode + "&year=" + currentYea

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論