url傳遞中文亂碼解決
js合成url時,如果引數是中文,傳到struts2中會亂碼,解決辦法如下:
1.js檔案中使用encodeURI()方法(必須套兩層)。
login_name = encodeURI(encodeURI(login_name));
2.action中URLDecoder解碼
loginName = Java.net.URLDecoder.decode(loginName,"UTF-8");
-------------------------------------------------------------------------------------
實際應用如下queryPrice()方法:
- 1)js程式碼:
- /*模糊查詢價格策略*/
- function queryPrice()
- {
- var checkMoney = true;
- var textMoney = $("#textMoney");
- var textArea = $("#textArea");//地區錯誤提示位置
- /**
- * 點選查詢,判斷至少選擇了一個面值,否則不能查詢
- */
- var obj = document.getElementsByName("money");
-
for( var i=0; i<obj.length; i++)
- {
- if(obj[i].checked)
- {
- checkMoney = true;
- break;
- }
- else
- {
- checkMoney = false;
- }
- }
-
if( ($("#Area_a").val() != 'no') && ($("#Area_b").val() != 'no') && checkMoney == true
- {
- var checkText=$("#Area_b").find("option:selected").text();//###這裡得到select被選中option的text
- var Area_b_text = encodeURI(encodeURI(checkText));
- $("#form1").attr("action","priceStrategy_querAllPriceStrategy2?Area_b_text="+Area_b_text);
- $("#form1").submit();
- }
- else
- {
- textArea.html("<font color='red'>選擇地區!</font>");
- textMoney.html("<br><font color='red'>至少選擇一種面值!</font>");
- }
- }
- 2)jsp頁面
- <table border=1 width="100%">
- <tr>
- <td colspan="3">查詢操作</td>
- </tr>
- <tr>
- <td>
- 地區:
- </td>
- <td>
- <select id="Area_a" name="Area_a" size="1" onchange="getAllCityOrProvince()">
- <c:choose>
- <c:when test="${ Area_a == 'nei' }">
- <option value="no">==請選擇==</option>
- <option value="nei" selected="selected">省內</option>
- <option value="wai">省外</option>
- </c:when>
- <c:when test="${ Area_a == 'wai' }">
- <option value="no">==請選擇==</option>
- <option value="nei">省內</option>
- <option value="wai" selected="selected">省外</option>
- </c:when>
- <c:otherwise>
- <option value="no" selected="selected">==請選擇==</option>
- <option value="nei">省內</option>
- <option value="wai">省外</option>
- </c:otherwise>
- </c:choose>
- </select>
- <select id="Area_b" name="Area_b" size="1">
- <c:choose>
- <c:when test="${ Area_b_text != null }">
- <option value="${ Area_b }">${ Area_b_text }</option>
- </c:when>
- <c:otherwise>
- <option value="no"> </option>
- </c:otherwise>
- </c:choose>
- </select>
- </td>
- <td><span id="textArea"></span></td>
- </tr>
- <tr>
- <td>
- </td>
- <td>
- <input type="button" value=" 查詢 " onclick="queryPrice()"/>
- <input type="button" value=" 重置 " onclick="resetQueryPrice()"/>
- </td>
- <td> </td>
- </tr>
- </table>
- 3)struts2的Action中getter方法這樣設定:
- private String Area_b_text;//第二個select中的text
- public void setArea_b(String areaB) {
- Area_b = areaB;
- }
- public String getArea_b_text() throws UnsupportedEncodingException {
- return java.net.URLDecoder.decode(Area_b_text,"UTF-8");//前臺獲得時自動轉為UTF-8編碼格式
- }
=====================================================================================
###其他資料
url傳遞中文
如果jsp頁面,myeclipse、web.xml中org.springframework.web.filter.CharacterEncodingFilter,都是UTF-8編碼,
直接傳中文一般是不會亂碼的,如果再有亂碼,可以用以下的方式試試。
目前收集到4中方法,中文傳參一documentPath為例:
1.改為form方式提交,不用超連結方式提交,用form方式傳參指定不亂碼。
2.通過encodeURI(encodeURI(checkText))提交,java程式碼中用URLDecoder.decode解碼:
<script>
function download(documentPath){
var url = "<c:url value='/product/download.action?documentPath='/>"+documentPath;
url = encodeURI(encodeURI(url));
window.location.href=url;
}
</script>
java程式碼中取中文:
String documentPath = (String) request.getParameter('documentPath');
documentPath = URLDecoder.decode(documentPath,"utf-8");
3.修改tomcat的server.xml中的connector,新增URLEncoding="UTF-8"
4.中文從java中傳到jsp再通過url傳到java:
java中編碼:URLEncoder.encode(URLEncoder.encode("傳遞的中文","utf-8"));
java中解碼碼:URLDecoder.decode(request.getParameter('documentPath'),"utf-8");