首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> JSP 程式設計 >> 關於JSP

Struts 2 中文亂碼兩大經典陷阱與解決方案

     編輯:關於JSP

專案全鏈路設定 UTF-8 (DB、頁面、Struts、Filter) 仍出現兩種詭異亂碼情況,記錄於此為鑑。

陷阱一:GET 請求中文參數亂碼

現象:POST 表單正常,GET 請求 (超連結、AJAX GET) 中文參數變亂碼。
原因:Tomcat 預設 URL 解碼使用 ISO-8859-1,非 UTF-8。
解決:修改 $CATALINA_HOME/conf/server.xml 中 `` 元素,加入 URIEncoding="UTF-8":

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           URIEncoding="UTF-8" />

重啟 Tomcat 即生效。注意:此設定影響所有 WebApp 的 GET 參數解碼。

陷阱二:<s:property> 輸出 HTML 標籤未解析

現象:頁面顯示正常,但「檢視原始碼」發現後台資料被 HTML Entity 編碼(如 `` 變 `<b>`),導致富文本內容直接顯示標籤而非渲染。
原因:Struts 2 `` 預設 `escape="true"`,會將輸出進行 HTML 轉義防 XSS。
解決:在需要輸出 HTML 內容的標籤上明確關閉轉義:

<s:property value="content" escape="false" />

同時檢視原始碼確認標籤已正常輸出。安全提醒:僅對可信內容(如後台編輯器產出)關閉 escape,用戶輸入內容務必保持 escape=true 防 XSS。

總結檢查清單

  1. DB 連線字串含 `characterEncoding=utf8`
  2. JSP 頁面指令 `pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"`
  3. web.xml 配置 `CharacterEncodingFilter` (Spring) 或 Struts `struts.i18n.encoding=UTF-8`
  4. Tomcat `server.xml` Connector 加 `URIEncoding="UTF-8"` (解決 GET 亂碼)
  5. 輸出 HTML 內容時 `` (解決標籤轉義)

亂碼問題本質是編碼/解碼鏈路任一環節不一致。全鏈路 UTF-8 + 針對性關閉轉義,可徹底根治。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved