2014-12-18

Tomcat 8 改了 Connector URIEncoding 預設值!

某一天某一個 Web 專案突然不能用中文執行查詢,網址列上是顯示中文(用 GET),但是查詢結果沒有資料,查詢字串也變成一堆問號,由於使用者的機器運作正常就沒去管它,只不過是我的本機不能用中文查詢,不會怎樣。


但隨著 CR 與 Bug 的出現,這個小小地不便還挺討厭的,還是來搞清楚發生什麼事了吧!

使用者用的是 Tomcat 6 Windows 安裝版,我的是 Tomcat 8 解壓縮版。

第一步當然是看 server.xml 裡的 Connector,我的有加 URIEncoding="UTF-8",使用者的沒有加,不能改使用者的,搞爛使用者網站的風險我擔不起啊!

那就來看我的為什麼會變問號!

疑?我的參數到後台是正常的,直到我「刻意」重新編碼,從 ISO-8859-1 重編成 UTF-8,就變成問號了,兇手在這。

使用者沒有加 URIEncoding="UTF-8",因而是用預設的 ISO-8859-1,所以重新編碼後是正常的。

不想改重新編碼,會影響到使用者,也太費工了。

只好把我的 URIEncoding="UTF-8" 拿掉,也來用預設值就好了吧!

錯,還是一樣,一到後台是正常的,重新編碼後就爛了,Why?

經過一番 Google 熱線,終於搞清楚了。

Tomcat 8 改了 Connector URIEncoding 預設值!

Tomcat 8 改了 Connector URIEncoding 預設值!

Tomcat 8 改了 Connector URIEncoding 預設值!

參考官方文件如下。

Tomcat 6 的官方文件


Tomcat 6 預設用 ISO-8859-1。

Tomcat 7 的官方文件


Tomcat 7 預設也是用 ISO-8859-1。

Tomcat 8 的官方文件


Tomcat 8 預設用 UTF-8,除非加上一個叫做 org.apache.catalina.STRICT_SERVLET_COMPLIANCE 的系統變數,才會使用 ISO-8859-1。

又或者加上 URIEncoding="ISO-8859-1" 也是可以的。

在我的 Connector 加上 URIEncoding="ISO-8859-1" 後就正常了(應該說跟使用者一樣了)。



沒有留言:

張貼留言