最近遇到一個問題:用get方法傳遞中文有問題,用post沒有問題。
問題簡單的描述是這樣的:
<a href="userGroup.jsp?userGroupName=<%=userGroupName%>">aa</a>
這里userGroupName是中文
在userGroup.jsp頁面得到的userGroupName卻是亂碼。
每個頁面也都有<%@ page language="java" pageEncoding="GBK" %>說明。
后來上網找了一下才知道:pageEncoding這個只對post起作用。get方法提交時,大家可以從地址欄里看到提交的參數,這是因為get方法傳遞是作為報文頭提交的,而pageEncoding對報文頭是沒有作用的,所以仍然按照 iso8859-1編碼,才出現了剛才的亂碼問題。而post提交的是form表單的內容,pageEncoding指定了它的編碼,所以他會按照指定編碼傳遞。
問題清楚了,下面就來解決它:
由于tomcat的servlet實現中ServletRequest.setCharacterEncoding方法未對HTP報文頭的內容進行解碼,因此
使用HTTP的GET方法提交的數據將不能正確的解碼.解決方案為修改其服務器的配置server.xml文件中對HTTP協議的
Connector配置,加上URIEncoding="GBK"屬性,配置完成以后"可能"的內容為
< Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" URIEncoding="GBK" /> URL傳中文出現亂碼時:
問題:如傳類似這樣的地址" index.jsp?ddurl="+"我們是";ddurl獲得的就是亂碼。
解決辦法:這種傳值方式相當于get傳值,在傳值時對他加密:
encodeURI(url);