jsp解決中文查詢關鍵詞亂碼以及表單method獲取方式的使用問題
最近遇到一個問題:輸入查詢關鍵字,第一次能查出資料,第二次就查不出了,請看下圖:
第一次查詢:
第二次查詢:
可能有些大佬已經看出區別了:第一次查詢的路徑為:http://mylover:8080/CloudSpace/result_search.jsp?keyWord=%E4%B8%AD%E5%9B%BD,
而第二次查詢的路徑為:http://mylover:8080/CloudSpace/result_search.jsp,區別就在第一次查詢的路徑多了查詢的關鍵詞:keyword=***,通過查詢資料我們知道,這是亂碼問題(至於為什麼,下文會解釋),於是,通過以下就可以解決這個問題
String keyWord = request.getParameter("keyWord"); String keyWord1 = new String(keyWord.getBytes("ISO-8859-1"),"utf-8");
這樣得到的關鍵字keyword1就不會亂碼了。有圖有真相:
到此,基本上解決了本文標題的前半部分。接下來我們來看看標題的第二個問題:表單method獲取方式的使用問題
在這裡我們需要回到前面提到的前後兩次查詢中路徑的區別:一個的url有keyword=***這樣的欄位,一個沒有,導致這樣的問題出現的原因就是我在兩個提交頁面中表單的method方式不一樣,一個的表單為:<form action="result_search.jsp" >,另一個的為: <form action="result_search.jsp" method="post">
所以jsp將method的提交方式預設get,於是才會出現提交路徑中有keyword=***這樣的欄位。接下來才是重點!!!
通過get提交的資料jsp的伺服器會對其進行重新編碼為:ISO-8859-1格式。我通過重新編碼的方式解決了這個問題,可是第二次查出卻又出現亂碼:
這又是為什麼呢?這是因為我第二個表單method的方式是post,提交的資料是採用jsp伺服器預設的編碼方式進行編碼(我設定的格式為:UTF-8),然而我卻對其進行了編碼,於是就出現了了第二次查詢不成功的問題。
所以,在使用表單的使用,一定要注意表單的method方式,格式要儘量統一,否則很容易出現一項意想不到問題。