在Ajax程序中,在URL拼接時帶有中文參數是不可避免的事情,如
var url='/YourAppName/CreateTodo.do?name='+name;
其中name是來自inputbox的取值,它可能帶有中文。
如果讓Ajax直接提交這樣的URL,那么后臺用request.getParameter("name");這樣的方法得到的name就會含有亂碼。
解決之道是先對URL進行兩次編碼,用的是JavaScript的encodeURI函數,具體代碼如下:
var url=encodeURI('/YourAppName/CreateTodo.do?name='+name);
url=encodeURI(url);
在后臺的Servlet或是Action中,可以這樣得到正確的文字:
Sting name=java.net.URLDecoder.decode(request.getParameter("name"),"utf-8");
就是這樣,值得注意的是,中文環境的機器用容器跑WebApp也許不需要這樣的處理,但其它環境如日文,英文就非此不可了,因此在編碼時盡可能這樣處理一下,如果安裝后出現問題就會造成慌亂了。我們在編寫Web程序時,最好讓文件編碼,數據庫編碼,輸出編碼,網頁編碼保持一致,這樣能省去很多麻煩。
以上操作的具體原理請見:
http://yiminghe.javaeye.com/blog/243812
http://yiminghe.javaeye.com/blog/247837