看了好幾篇文, 對中文參數傳遞時會變亂碼終於有點頭緒, 所以就來分享一下,
其實用browser大大的方法是最簡單的解決方法, 建議初學者用這個先練習一下.
但就是要一個一個的改, 對於開發網站的不太好做, 所以分享一下我暫時的做法
os: Win2000 server + Tomcat 5.0.28 + JDK 1.4.2_07
*: 因為我都習慣用UTF-8, 所以檔案要是UTF-8格式(web.xml 和 server.xml 不用特意去改, 原本是怎樣就直接修改即可)
站台叫\mytest
參數傳遞可分為POST 和 GET
[POST]
用Filter, Tomcat 已經做了個例子, 直接拿來用,
在\jsp-examples\WEB-INF\classes\filters\SetCharacterEncodingFilter.class
copy 到自己的站台\mytest\WEB-INF\classes\filters\裡,(如果package有變更時需要修改.java檔再編譯為.class來使用)
修改mytest\WEB-INF\web.xml, 新增以下的code
<filter>
<filter-name>SetCharacterEncoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncoding</filter-name>
<url-pattern>
Tips: 如果多個站台都想用這個方法, 可以把filters\SetCharacterEncodingFilter.class 複製到{tomcat}\shared\classes裡, 再修改{有需要用的站台}\WEB-INF\web.xml, 新增以上的code
[GET]
就是用本title第一篇精靈大大的方法, 修改{tomcat}\conf\server.xml,
找到
<Connector port=80
or
<Connector port=8080
新增一句"URIEncoding="UTF-8"", 即
<Connector port=80
URIEncoding=
...略...照原來的, 不用動...
這樣, 用<form method="get">的話, 直接接收就已經是中文了, 如果用link 時, 就要先把中文部分先編碼, 如
<%String str = ;
str = java.net.URLEncoder.encode(str,);
%>
<a href=
直接接收即可
這樣, 基本上就解決了post和get的亂碼問題.
PS. 在修改web.xml 和 server.xml 後一定要記得重開Tomcat
[未解問題]
像shirley_wang 有提到, 用
<form method= enctype=>
還是不行
[我有問題]
browser wrote:
不過當初我最後的做法是使用 Filter 的方式
Filter 的做法就是:先判斷是使用那種傳遞方式( GET or POST),假若是用 GET 的方式就採用第一種 code;若使用POST 方式,就採用第二種 code。
請問browser大大, 如何在Filter裡判斷GET 還是 POST 呢?