1. GET請求部份
Tomcat使用ISO-8859-1編碼作為預設的URL編碼,所以當web發出夾帶中文訊息的get請求時,資料就會變成亂碼。
解決方法是修改\Tomcat\conf\server.xml檔案,找到Connector標籤,加入URIEncoding="UTF-8"即可。
<Connector port="8080" protocol="HTTP/1.1"
URIEncoding="UTF-8"
connectionTimeout="20000"
redirectPort="8443" />
2. POST請求部份
Tomcat提供了一個名為SetCharacterEncodingFilter.class的filter,可以將POST請求改為UTF-8編碼
Tomcat 6.x版本:
將
webapps/examples/WEB-INF/classes/filters/SetCharacterEncodingFilter.class
複製到你的webapp資料夾中yourwebapp/WEB-INF/classes/filters/SetCharacterEncodingFilter.class
並在web.xml設定filter<filter>
<filter-name>Set Character Encoding</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>Set Character Encoding</filter-name>
<!--將全部的請求都mapping給filter-->
<url-pattern>/*</url-pattern>
</filter-mapping>
Tomcat 7.x以及5.5.36、6.0.36之後的版本:
在Tomcat 7.x以及5.5.36、6.0.36之後的版本中,已經將SetCharacterEncodingFilter加入Tomcat核心中,因此不需要再自行複製class到自己的webapp資料夾中,在設定filter時直接指定class即可。
<filter>
<filter-name>Set Character Encoding</filter-name>
<!--差異處-->
<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<!--將全部的請求都mapping給filter-->
<url-pattern>/*</url-pattern>
</filter-mapping>
Reference:
- Tomcat wiki - Character Encoding Issues
http://wiki.apache.org/tomcat/FAQ/CharacterEncoding - Configuring Tomcat's URI encoding
https://confluence.atlassian.com/display/DOC/Configuring+Tomcat's+URI+encoding
No comments:
Post a Comment