在 Web 開發中,URL 參數傳遞中文內容時經常會遇到亂碼問題。這主要是因為瀏覽器與伺服器對字元編碼的處理方式不一致所導致。本文將詳細介紹 JSP 頁面之間傳遞中文參數的正確編碼與解碼方法,並提供完整的程式碼範例供參考。
要解決中文參數亂碼,關鍵在於前端雙重編碼與後端指定 UTF-8 解碼的配合使用:
a.href = "./showCont.jsp?tcontent=" + encodeURI(encodeURI(tcontent));
這裡使用兩次 encodeURI() 是為了確保特殊字元(如 %、&、= 等)被正確轉義,避免在 URL 傳輸過程中被誤解析。
java.net.URLDecoder.decode((String) request.getParameter("tcontent"), "UTF-8");
務必明確指定 UTF-8 字元集,否則伺服器可能會使用預設編碼(如 ISO-8859-1)導致解碼錯誤。
<%@ page contentType="text/html; charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>中文參數傳遞測試</title>
</head>
<body>
<%
String str_test = "華工";
%>
<form method="post" action="b.jsp?test=<%= java.net.URLEncoder.encode(str_test, "UTF-8") %>">
<input type="submit" value="提交" name="submitBtn">
</form>
</body>
</html>
<%@ page contentType="text/html; charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>接收中文參數</title>
</head>
<body>
<%
// 正確方式:指定 ISO-8859-1 取得原始位元組,再以 UTF-8 解碼
String param = request.getParameter("test");
if (param != null) {
String str = new String(param.getBytes("ISO-8859-1"), "UTF-8");
out.println("接收到的參數:" + str);
}
%>
</body>
</html>
<form> 標籤加上 accept-charset="UTF-8" 可進一步保障編碼一致性。server.xml 的 <Connector> 加入 URIEncoding="UTF-8" 可解決 GET 請求亂碼。掌握這套「雙重編碼 + 指定解碼」模式,即可徹底解決 JSP 頁面間中文參數傳遞的亂碼困擾。