url中攜帶中文的部分情況分析

2021-06-22 14:29:49 字數 1570 閱讀 3658

位址列中出現漢字的情況有兩種,一種是漢字出現在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解碼 請求後,返回...