位址列中出現漢字的情況有兩種,一種是漢字出現在url的路徑部分,一種是漢字出現在url的傳參的部分,第二種情況的時候必須採用編碼後傳參,接受時解碼的方式完成傳參。js中編碼有escape(),encodeuri(),encodeuricomponent()三個常用的方法,escape()常常用在提交頁面和處理頁面的編碼格式相同的情況下(比如它們都是gb2312),encodeuri()和encodeuricomponent()的用法基本相同,區別在於encodeuricomponent()也對"?"等特殊字元進行編碼。發現原來,是escape()方法造成了異常,同時了解了瀏覽器傳遞位址的一些原理,在瀏覽器位址列裡,瀏覽器認為%是個轉義字元,瀏覽器會把%與%之間的編碼,兩位兩位取出後進行解碼,然後再傳遞給處理頁面,
然後由處理頁面進行再次解碼。由此我想到一直使用encodeuri方法是正確的,只是需要使用兩次encodeuri方法,例如encodeuri(encodeuri("中文"));第一次是把中文編碼成%xy的格式,
第二次是對%xy中的%進行編碼,%編碼成%25。整個傳參過程大體應該是:提交頁面使用encodeuri(encodeuri("中文"))編碼,把最後的編碼結果%25xy傳遞給處理頁面的過程中,瀏覽器獲取url位址
(注意openmodeldialog方法,瀏覽器獲取不到引數編碼)後解碼成%xy,然後把%xy傳遞給處理頁面,處理頁面使用urldecoder.decode(request.getparameter("引數名"),"utf-8");完成解碼。
總結:1、漢字出現在url路徑部分的時候不需要編碼解碼;
2、使用encodeuri進行2次編碼;
3、在openmodeldialog()開啟的模式窗體裡沒辦法用request.getparameter正確獲取引數;
客戶端和伺服器在傳遞資料時可以用過濾器filter解決字元編碼問題,但filter只能解決post方式提交的資料。對於get方式,可以使用兩次encodeuri(encodeuri(「中文」))並在伺服器中使用urldecoder.decode(「中文」, "utf-8");
今天用ajax校驗資料時也遇到這個問題,儘管頁面、類和web容器都統一了字元編碼,提交的資料依然是亂碼,所以就採用了2次encodeuri()編碼方式,亂碼問題就解決了。
頁面var name=document.myform.username.value;
action中
string name = request.getparameter("name");
name = urldecoder.decode(name, "utf-8");
servlet返回資料時,將字元編碼設定為utf-8就可以了,因為ajax只支援utf-8
response.setcontenttype("text/xml;charset=utf-8");
printwriter out = response.getwriter();
out.print(result);
Lua中url的中文轉碼
local lua util function lua util.url encode str if str then str string.gsub str,n r n str string.gsub str,w function c return string.format 02x string...
ProxySG 對URL中Query部分的定義
先來看下面這個例子 要求阻擋查詢語句中url file的訪問請求,放行查詢語句中url http的訪問請求 proxysg的其中一項主要功能就是對url的精細控制,但vpm圖形化介面中的url domain object只能定義到path,path之後的內容無法定義到,這就意味著proxysg無法控...
iOS中的URL處理中文亂碼
1.url編碼 ios中http請求遇到漢字的時候,需要轉化成utf 8,用到的方法是 nsstring newurlstr urlstring stringbyaddingpercentescapesusingencoding nsutf8stringencoding 2.url解碼 請求後,返回...