最近完成一個項目,其中遇到了兩次比較詭異的亂碼問題,在這裡記錄一下,給自己提個醒,也為後來者提供參考。
這是一個用SSH實現的項目,為了防止亂碼,從數據庫到頁面編碼,再到struts的默認編碼方式全部設置為了utf-8(具體設置方式網上有很多資料啦,這裡不贅述了),以為這樣就能沒有後患了,但事情發展沒有這麼順利。
1. 使用post的方式提交表單一切數據正常,使用get的方式提交表單則會有中文亂碼。這是因為URL的編碼問題產生的,URL的默認編碼並不是utf-8,所以需要在Tomcat的conf文件夾下修改server.xml中的加入URIEncoding="UTF-8"
<Connector URIEncoding="UTF-8"connectionTimeout="20000" port="8080"protocol="HTTP/1.1" redirectPort="8443" />
2.頁面所有數據顯示正常,包括中文等,沒有亂碼。但是打開源文件發現只要是通過struts標簽從後台拿到的數據都是亂碼,類似一堆數字。在一般情況下,這個問題沒什麼影響,畢竟頁面顯示正常,但是在顯示由富文本框提交的顯示的數據時,會直接打印出標簽信息,而不是進行解析,如本應顯示粗體<b>,會直接打印<b>...</b>。剛開始很困惑,後來一想,從後台拿來的數據都是正常的,為什麼到了頁面就會出現這種情況,問題肯定出在struts標簽上,後來一查Tag Reference,發現<s:property />有個屬性叫escape默認為true,意思是會跳過對html的解析,所以只要設置escape="false"就不會有問題了,再回頭看源文件,內容頁正常了。
本欄目