escape()除了 ASCII 字母、數字和特定的符號外,對傳進來的字元串全部進行轉義編碼,

因此如果想對URL編碼,最好不要使用此方法。 而encodeURI() 用於編碼整個URI,因為URI中的合法字元都不會被編碼轉換的。 encodeURIComponent方法在編碼單個URIComponent(指請求參數)應當是最常用的,它可以講參數中的中文、特殊字元進行轉義,而不會影響整個URL

當通過jquery傳遞中文參數時,頁面出現了亂碼,這時需要對參數進行處理:

javascript中代碼:[javascript] view plaincopy
  1. varsubCompanyName=encodeURIComponent(encodeURIComponent($("#subCompanyName").val()));
  2. window.open("../powerStation/doSubAddForward.do?subCompanyId="+subCompanyId+"&subCompanyName="+subCompanyName,"添加明細","width_=620,height=360,left=200,location=no");

注意對參數subCompanyName進行了兩次encodeURIComponent包裝。

java代碼中:

[java] view plaincopy

  1. StringsubCompanyName=request.getParameter("subCompanyName");
  2. subCompanyName=URLDecoder.decode(subCompanyName,"utf-8");

[html] view plaincopy

  1. java.net.URIDecoder.decode(Strings,Stringenc)方法說明:
  2. decode
  3. publicstaticStringdecode(Strings,
  4. Stringenc)
  5. throwsUnsupportedEncodingException
  6. 使用指定的編碼機制對application/x-www-form-urlencoded字元串解碼。給定的編碼用於確定任何"%xy"格式的連續序列表示的字元。
  7. 註:WorldWideWebConsortiumRecommendation聲明應使用UTF-8。如果不使用該編碼,可能造成不兼容性。

這樣頁面中文格式就正常顯示了。但是後臺還是報了異常,並不影響正常顯示。因為我的項目用的是GBK編碼,這與java.net.URIDecoder.decode(String s,String enc)方法的說明相一致。但是如果後臺能夠不報異常豈不更好?

哪位大俠有好的辦法可以給我點提示。先行拜謝!

-------------------------------------

2011-09-06

上面是為瞭解決頁面跳轉的顯示需要兩次encodeURIComponent。

實際上一次encodeURIComponent之後,將其轉為utf-8格式,然後在後臺轉回來即可。

js中:

encodeURIComponent($("#subCompanyName").val());

後臺:

String subCompanyName = request.getParameter("subCompanyName");

subCompanyName = URLDecoder.decode(subCompanyName, "utf-8");

推薦閱讀:

查看原文 >>
相關文章