熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

js簡單實例處理url特殊符號&處理

2013-11-15 11:55:26  來源: JSP教程 

  url裡的參數內容包含&符合我有兩種方法解決
其一方法是在頁面用JS轉碼例子如下(前端處理)
<<a href="#" onclick="test(${grouptype}${groupcn })">${groupcn })</a>
<script language="javascript">
function test(ab){
alert("test");
location + a + &cn= + encodeURIComponent(b);
}
</script>
其二方法是在後端處理
>>>>>>>>>>>>>>>>>>>>jsp:
<a href="groupsDetailServlet?cn=${groupencodedCN }&groupTypeForDetail=${GroupType}"+>${groupcn }</a>
>>>>>>>>>>>>>>>>>>>>java bean: group
String cn;//要顯示的CN
String encodedCN;//當參數傳的CN
public Group(String cn) { this(); thiscn = cn; thisencodedCN =LdapUtilencodeURLStr(cn); }
public void setCn (String name) { thiscn = name; setEncodedCN(LdapUtilencodeURLStr(cn)); }
public String getCn () { return cn; }
public String getEncodedCN () { return encodedCN; }
public void setEncodedCN (String cn) { thisencodedCN = cn; }

>>>>>>>>>>>>>>>>>>>>調用類裡處理解碼
String cn = LdapUtildecodeURLStr(encodedCN);
>>>>>>>>>>>>>>>>>>>>LdapUtiljava
public static String encodeURLStr(String src)
{
return src != null && srctrim()length() > ? srcreplaceAll("&" "@") : "";
}
public static String decodeURLStr(String src)
{
return src != null && srctrim()length() > ? srcreplaceAll("@" "&") : "";
}

以下是網絡搜索資料分享
在使用url進行參數傳遞時經常會傳遞一些中文名(或含有特殊字符)的參數或URL地址在後台處理時會發生轉換錯誤在有些傳遞頁面使用GB而在接收頁面使用UTF這樣接收到的參數就可能會與原來發生不一致使用服務器端的 urlEncode函數編碼的URL與使用客戶端javascript的encodeURI函數編碼的URL結果就不一樣javascript對文字進行編碼涉及 個函數 escapeencodeURIencodeURIComponent相應 個解碼函數 unescapedecodeURIdecodeURIComponent

  javaScript中的編碼方法
escape () 方法采用ISO Latin字符集對指定的字符串進行編碼 所有的空格符標點符號特殊字符以及其他非ASCII字符都將被轉化成%xx格式的字符編碼(xx等於該字符在字符集表裡面的編碼的進制數字)比如空格符對應的編碼是%unescape方法與此相反不會被此方法編碼的字符 @ * / +
encodeURI ()方法把URI字符串采用UTF編碼格式轉化成escape格式的字符串 不會被此方法編碼的字符! @ # $& * ( ) = : / ; ? +
encodeURIComponent ()方法把URI字符串采用UTF編碼格式轉化成escape格式的字符串與encodeURI()相比這個方法將對更多的字符進行編碼比如 / 等字符 所以如果字符串裡面包含了URI的幾個部分的話不能用這個方法來進行編碼否則 / 字符被編碼之後URL將顯示錯誤不會被此方法編碼的字符! * ( )
因此對於中文字符串來說如果不希望把字符串編碼格式轉化成UTF格式的(比如原頁面和目標頁面的charset是一致的時候)只需要使用escape如果你的頁面是GB或者其他的編碼而接受參數的頁面是 UTF編碼的就要采用encodeURI或者encodeURIComponent
另外encodeURI/encodeURIComponent是在javascript之後引進的 escape則在javascript版本就有
傳遞參數時需要使用 encodeURIComponent這樣組合的 url 才不會被 # 等特殊字符截斷例如<script language="javascript">documentwrite(<a href="+encodeURIComponent ("+">退出 </a>);</script>
進行 url跳轉時可以整體使用 encodeURI 例如Locationhref=encodeURI ("百度 &ct=");
js 使用數據時可以使用escape 例如搜藏中history 紀錄
escape對 以外的unicode 值進行編碼時輸出 %u**** 格式其它情況下escape encodeURI encodeURIComponent編碼結果相同

最多使用的應為encodeURIComponent 它是將中文韓文等特殊字符轉換成utf 格式的 url 編碼所以如果給後台傳遞參數需要使用encodeURIComponent 時需要後台解碼對 utf 支持(form 中的編碼方式和當前頁面編碼方式相同)
escape不編碼字符有 * + / @ _ az AZ
encodeURI不編碼字符有 ! # $ & ( ) * + / : ; = ? @ _ ~ az AZ
encodeURIComponent不編碼字符有 ! ( ) * _ ~ az AZ
以下是url中可能用到的特殊字符及在url中的經過編碼後的值(略)
項目中發現直接對url中的參數部分做encodeURI() 編碼轉換後台servlet通過getParamater()獲取時不需要轉換可以直接獲取到正確的值 說明參數沒有用到中文框架用的是struts框架


From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19899.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.