中文參數在我們的web項目中,傳遞會出現亂碼。這一直是讓人覺得比較煩的問題。我解決問題的基本思路是:
1,在前台對中檔案參數進行編碼。
2,在後台接收參數後,再對中文參數進行解碼。
中文參數編碼處理:encodeURI(encodeURI(這裡是你要傳遞的中文參數));
後台接收中文參數進行解碼: java.net.URLDecoder.decode(你擷取到的中文參數, "UTF-8");
上面的兩個步驟基本就可以解決問題。
---------------------補充
javascript中存在幾種對URL字串進行編碼(的)方法:escape(),encodeURI(),以及encodeURIComponent()。這幾種編碼所起(的)作用各不相同。
escape() 方法:
採用ISO Latin字元集對指定(的)字串進行編碼。所有(的)空格符、標點符號、特殊字元以及其他們非ASCII字元都將被轉化成%xx格式(的)字元編碼(xx等於該字元在字元集表裡面(的)編碼(的)16進位數字)。比如,空格符對應(的)編碼是%20。
不會被此方法編碼(的)字元: @ * / +
encodeURI() 方法:
把URI字串採用UTF-8編碼格式轉化成escape格式(的)字串。
不會被此方法編碼(的)字元:! @ # $& * ( ) = : / ; ? + '
encodeURIComponent() 方法:
把 URI字串採用UTF-8編碼格式轉化成escape格式(的)字串。與encodeURI()相比,這個方法將對更多(的)字元進行編碼,比如 / 等字元。所以如果字串裡麵包含了URI(的)幾個部分(的)話,不能用這個方法來進行編碼,否則 / 字元被編碼之後URL將顯示錯誤。
不會被此方法編碼(的)字元:! * ( ) '
因 此,對於中文字串來說,如果不希望把字串編碼格式轉化成UTF-8格式(的)(比如原頁面和目標頁面(的)charset是一致(的)時候),只需要使用 escape。如果你們(的)頁面是GB2312或者其他們(的)編碼,而接受參數(的)頁面是UTF-8編碼(的),就要採用encodeURI或者 encodeURIComponent。
另外,encodeURI/encodeURIComponent是在javascript1.5之後引進(的),escape則在javascript1.0版本就有。
傳參:用encodeURI("url參數")將url編碼
收參:用decodeURI("接收到(的)值")解碼