對於get方式傳參的中文亂碼的解決方案

2021-08-26 14:00:53 字數 1077 閱讀 1602

moviename='風聲';

playurl='/movie/風聲/風聲.rm';

url="play.jsp?moviename="+moviename+"&playurl="+playurl

url="play.jsp?moviename="+encodeuri(encodeuri(moviename))+"&playurl="+encodeuri(encodeuri(playurl))

伺服器通過以下方式獲取值:

moviename=urldecoder.decode(moviename,"utf-8");

playurl=urldecoder.decode(playurl,"utf-8");

*************************=

首先如果不編碼,那些非英文abc等字元會被瀏覽器按照網頁當前的字符集進行編碼傳到伺服器去, 而伺服器則只會按照伺服器配置的字符集編碼(有預設的好像就是iso***x)進行解碼,所以如果網頁的字符集和伺服器字符集解碼一致那麼就不會出亂碼!

但是往往對於我們來說是不一致的。所以一般情況會出現亂碼, 所以就有人想到用encodeuri來進行編碼再傳送到伺服器,但是要注意encodeuri來編碼是以utf-8來進行編碼的,而伺服器對於url裡面的非abc等字元進行解碼幾乎預設都不是utf-8

所以如果你encodeuri一次的話, 通過request.getparam...而得來的是被伺服器以另外一種(一般是iso...)編碼解碼得到的.所以通過utf-8編碼過後 再通過iso解碼當然獲得的是亂碼, 即使你通過decode(***, 'utf-8')獲取之後的也不對,因為這個過程是 utf-8編碼 ---- iso解碼 ----- utf-8解碼,這個過程當然不對了哦!

而通過兩次編碼再通過兩次解碼為什麼就對了呢, 她是這麼乙個過程 utf-8編碼-utf-8編碼 --- iso解碼 ----utf-8解碼。

在這裡要注意 因為通過第一次utf-8編碼之後的都全是英文本元了,對於英文本元 utf-8編碼 和iso編碼是一樣的效果

所以上面的過程就相當於 utf-8編碼-iso編碼 --- iso解碼 ----utf-8解碼 這樣乙個過程是對稱的當然最後會得到正確的結果了

get方式傳參的中文亂碼的解決方案

假設 username 張三 url viewdetail.jsp?username username url viewdetail.jsp?username encodeuricomponent encodeuricomponent username 伺服器通過以下方式獲取值 username u...

JS傳參中文亂碼

在傳參的時候給中文引數加上兩個encodeuri即可,類似這樣 encodeuri encodeuri balanceunit 寫法二escape encodeuri tmplitem.hyzname 接收函式用unescape decodeuri tmplitem.hyzname 寫法三escap...

Java URL傳參中文亂碼的問題

1 使用encodeuri 函式對要傳的引數進行二次編碼 參考username encodeuri encodeuri username window.location.href path x?userid userid username username 2 decodeuri geturlpar...