JS中URL編碼參數(UrlEncode)


網上有很多文字作品寫涉及在JS中呈現類似UrlEncode功能時都是自定義參數來呈現,其實JS中本身就有那樣的參數。
參數parameter由於用類似URL的形式傳過去 , 所以別直接就那樣賦值
以下是對變量值的URL編碼總結 : 意見用encodeURIComponent() , GET 和POST方法都能夠發送過去
Java編程script中存在幾種對URL字符串停止編碼的竅門:escape(),encodeURI(),以及encodeURIComponent()。這幾種編碼所起的功能各不相同。
escape() 竅門:
采用ISO Latin字符集對指定的字符串停止編碼。所有的空格符、標點符號、特殊字符以及更多有聯系非ASCII字符都將被轉化成%xx各式的字符編碼(xx等於該字符在字符集表里面的編碼的16進制數字)。比如,空格符對應的編碼是%20。
不會被此竅門編碼的字符: @ * / +
encodeURI() 竅門:
把URI字符串采用UTF-8編碼各式轉化成escape各式的字符串。
不會被此竅門編碼的字符:! @ # $& * ( ) = : / ; ? + '
encodeURIComponent() 竅門:
把 URI字符串采用UTF-8編碼各式轉化成escape各式的字符串。與encodeURI()相比,那個竅門將對更多的字符停止編碼,比如 / 等字符。所以假如字符串里面包含了URI的幾個部份的話,別用那個竅門來停止編碼,否則 / 字符被編碼之后URL將呈現錯誤。
不會被此竅門編碼的字符:! * ( ) '

因 此,對於漢文字符串來說,假如不期望把字符串編碼各式轉化成UTF-8各式的(比如原頁面和目的頁面的charset是一致的時候),只需求應用 escape。假如你的頁面是GB2312或者更多有聯系的編碼,而接受參數parameter的頁面是UTF-8編碼的,就要采用encodeURI或 者encodeURIComponent。

 

 

 

用JavaScript實現UrlEncode和UrlDecode的腳本代碼

 

復制代碼
< script type = " text/vbscript " >
Function  str2asc(strstr)
str2asc 
=   hex ( asc (strstr))
End Function
Function  asc2str(ascasc)
asc2str 
=   chr (ascasc)
End Function
</ script >

< script type = " text/javascript " >
/* 這里開始時UrlEncode和UrlDecode函數 */
function  UrlEncode(str){
var ret
= "" ;
var strSpecial
= " !\ " #$% & ' ()*+,/:;<=>?[]^`{|}~%";
var tt =   "" ;

for (var i = 0 ;i < str.length;i ++ ){
var 
chr   =  str.charAt(i);
var c
= str2asc( chr );
tt 
+=   chr + " : " + c + " n " ;
if (parseInt( " 0x " + c)  >  0x7f){
ret
+= " % " + c.slice( 0 , 2 ) + " % " + c.slice( - 2 );
}
else {
if ( chr == "   " )
ret
+= " + " ;
else   if (strSpecial.indexOf( chr )! =- 1 )
ret
+= " % " + c.toString( 16 );
else
ret
+= chr ;
}
}
return ret;
}
function  UrlDecode(str){
var ret
= "" ;
for (var i = 0 ;i < str.length;i ++ ){
var 
chr   =  str.charAt(i);
if ( chr   ==   " + " ){
ret
+= "   " ;
}
else   if ( chr == " % " ){
var 
asc   =  str.substring(i + 1 ,i + 3 );
if (parseInt( " 0x " + asc ) > 0x7f){
ret
+= asc2str(parseInt( " 0x " + asc + str.substring(i + 4 ,i + 6 )));
i
+= 5 ;
}
else {
ret
+= asc2str(parseInt( " 0x " + asc ));
i
+= 2 ;
}
}
else {
ret
+=   chr ;
}
}
return ret;
}
alert(UrlDecode(
" %C2%D2%C2%EB " ));
</ script >  
復制代碼

 

 

 

JavaScript 中實現 ANSI(gb2312) 的 URL 編碼與解碼(URLEncode、URLDecode)

 

 encodeURI 和 encodeURIComponent 是按 UTF-8 對 URL 編碼的,下面的代碼是按 ANSI 對 URL進行編碼和解碼的。使用了兩個 vbscript 自定義函數,請參見 JavaScript 函數如何調用 VBScript 函數

以下整理自 Moocky.Mark's Blog。

 

復制代碼
< script type = " text/vbscript " >
< ! --
function  str2asc(strstr)
    str2asc   
=     hex ( asc (strstr))
end function
 
function    asc2str(ascasc)
    asc2str   
=     chr (ascasc)
end function
' -->
</ script >
 
 
< script type = " text/javascript " >
< ! --
function  urlEncode(str)
{
    var ret 
=   "" ;
    var strSpecial 
=   " !\ " #$% & ’() *+ , / :; <=> ?[] ^ `{|}~% " ;
    var tt  =   "" ;
    
for (var i  =   0 ; i  <  str.length; i ++ )
    {
        var 
chr   =  str.charAt(i);
        var c 
=  str2asc( chr );
        tt 
+=   chr   +   " : "   +  c  +   " n " ;
        
if  (parseInt( " 0x "   +  c)  >  0x7f)
        {
            ret 
+=   " % "   +  c.slice( 0 , 2 +   " % "   +  c.slice( - 2 );
        }
        
else
        {
            
if  ( chr   ==   "   " )
                ret 
+=   " + " ;
            
else   if  (strSpecial.indexOf( chr ) ! =   - 1 )
                ret 
+=   " % "   +  c.toString( 16 );
            
else
                ret 
+=   chr ;
        }
    }
   
    return ret;
}

function  urlDecode(str)
{
    var ret 
=   "" ;
    
for  (var i  =   0 ; i  <  str.length; i ++ )
    {
        var 
chr   =  str.charAt(i);
        
if  ( chr   ==   " + " )
        {
            ret 
+=   "   " ;
        }
        
else   if  ( chr   ==   " % " )
        {
            var 
asc   =  str.substring(i + 1 , i + 3 );
            
if  (parseInt( " 0x " + asc >  0x7f)
            {
                ret 
+=  asc2str(parseInt( " 0x "   +   asc + str.substring(i + 4 , i + 6 )));
                i 
+=   5 ;
            }
            
else
            {
                ret 
+=  asc2str(parseInt( " 0x " + asc ));
                i 
+=   2 ;
            }
        }
        
else
        {
            ret 
+=   chr ;
        }
    }
   
    return ret;
}
-->
</ script >
復制代碼

 

 

 

VBScript、VB.NET 中的 URLEncode、URLDecode

 

 (本文的 URLEncode、URLDecode 是按 ANSI 編碼的。千一網絡編輯注)

 VBScript 中的 URLEncode、URLDecode

 

復制代碼
' Cooly(☆給我一個開心的理由!☆)
 
Public   Function  URLEncode(strURL)
Dim  I
Dim  tempStr
For  I  =   1   To   Len (strURL)
    
If   Asc ( Mid (strURL, I,  1 ))  <   0   Then
       tempStr 
=   " % "   &   Right ( CStr ( Hex ( Asc ( Mid (strURL, I,  1 )))),  2 )
       tempStr 
=   " % "   &   Left ( CStr ( Hex ( Asc ( Mid (strURL, I,  1 )))),  Len ( CStr ( Hex ( Asc ( Mid (strURL, I,  1 )))))  -   2 &  tempStr
       URLEncode 
=  URLEncode  &  tempStr
    
ElseIf  ( Asc ( Mid (strURL, I,  1 ))  >=   65   And   Asc ( Mid (strURL, I,  1 ))  <=   90 Or  ( Asc ( Mid (strURL, I,  1 ))  >=   97   And   Asc ( Mid (strURL, I,  1 ))  <=   122 Then
       URLEncode 
=  URLEncode  &   Mid (strURL, I,  1 )
    
Else
       URLEncode 
=  URLEncode  &   " % "   &   Hex ( Asc ( Mid (strURL, I,  1 )))
    
End   If
Next
End Function
 
Public   Function  URLDecode(strURL)
Dim  I
 
If   InStr (strURL,  " % " =   0   Then  URLDecode  =  strURL:  Exit   Function
 
For  I  =   1   To   Len (strURL)
    
If   Mid (strURL, I,  1 =   " % "   Then
       
If   eval ( " &H "   &   Mid (strURL, I  +   1 2 ))  >   127   Then
          URLDecode 
=  URLDecode  &   Chr ( eval ( " &H "   &   Mid (strURL, I  +   1 2 &   Mid (strURL, I  +   4 2 )))
          I 
=  I  +   5
       
Else
          URLDecode 
=  URLDecode  &   Chr ( eval ( " &H "   &   Mid (strURL, I  +   1 2 )))
          I 
=  I  +   2
       
End   If
    
Else
       URLDecode 
=  URLDecode  &   Mid (strURL, I,  1 )
    
End   If
Next
End Function  
復制代碼
復制代碼
Private   Sub  Command1_Click() Sub  Command1_Click()
Text2.Text 
=  URLEncode(Text1.Text)
End Sub
 
 
Public   Function  URLEncode() Function  URLEncode(ByRef strURL  As   String As   String
Dim  I  As   Long
Dim  tempStr  As   String
For  I  =   1   To   Len (strURL)
    
If   Asc ( Mid (strURL, I,  1 ))  <   0   Then
       tempStr 
=   " % "   &   Right ( CStr ( Hex ( Asc ( Mid (strURL, I,  1 )))),  2 )
       tempStr 
=   " % "   &   Left ( CStr ( Hex ( Asc ( Mid (strURL, I,  1 )))),  Len ( CStr ( Hex ( Asc ( Mid (strURL, I,  1 )))))  -   2 &  tempStr
       URLEncode 
=  URLEncode  &  tempStr
    
ElseIf  ( Asc ( Mid (strURL, I,  1 ))  >=   65   And   Asc ( Mid (strURL, I,  1 ))  <=   90 Or  ( Asc ( Mid (strURL, I,  1 ))  >=   97   And   Asc ( Mid (strURL, I,  1 ))  <=   122 Then
       URLEncode 
=  URLEncode  &   Mid (strURL, I,  1 )
    
Else
       URLEncode 
=  URLEncode  &   " % "   &   Hex ( Asc ( Mid (strURL, I,  1 )))
    
End   If
Next
End Function
 
Public   Function  URLDecode() Function  URLDecode(ByRef strURL  As   String As   String
Dim  I  As   Long
 
If   InStr (strURL,  " % " =   0   Then  URLDecode  =  strURL:  Exit   Function
 
For  I  =   1   To   Len (strURL)
    
If   Mid (strURL, I,  1 =   " % "   Then
       
If  Val( " &H "   &   Mid (strURL, I  +   1 2 ))  >   127   Then
          URLDecode 
=  URLDecode  &   Chr (Val( " &H "   &   Mid (strURL, I  +   1 2 &   Mid (strURL, I  +   4 2 )))
          I 
=  I  +   5
       
Else
          URLDecode 
=  URLDecode  &   Chr (Val( " &H "   &   Mid (strURL, I  +   1 2 )))
          I 
=  I  +   2
       
End   If
    
Else
       URLDecode 
=  URLDecode  &   Mid (strURL, I,  1 )
    
End   If
Next
End Function
 
Private   Sub  Command2_Click() Sub  Command2_Click()
Text3.Text 
=  URLDecode(Text2.Text)
End Sub
 
Private   Sub  Form_Load() Sub  Form_Load()
Text1.Text 
=   " http://www.microsoft.com/中國微軟 "
End Sub  
復制代碼

 

純 JavaScript 版的 ANSI 的 URL 編碼與解碼

 

 

JavaScript 版本中可以通過 encodeURI, encodeURIComponent 實現 UTF-8 的 URL 編碼與解碼,但要實現 ANSI 的就得自己寫代碼了。

之前有一個 JavaScript 與 VBScript 混合的 ANSI 的 URL 編碼與解碼,遺憾的是某些瀏覽器無法支持 VBScript,所以才有了本文純 JavaScript 版的。

 

 

 

Unicode 與 ANSI 的編碼轉換

 

 

 ANSI 編碼與字符之間的轉換

復制代碼
function  str2asc(str)
{
    var n 
=  UnicodeToAnsi(str.charCodeAt( 0 ));
    var s 
=  n.toString( 16 );
    return s.toUpperCase();
}

function  asc2str(code)
{
    var n 
=  AnsiToUnicode(code);
    return 
String .fromCharCode(n);
}
復制代碼

URL 編碼與解碼

復制代碼
function  urlEncode(str)
{
    var ret 
=   "" ;
    var strSpecial 
=   " !\ " #$% & ’() *+ , / :; <=> ?[] ^ `{|}~% " ;
    var tt  =   "" ;
    
for (var i  =   0 ; i  <  str.length; i ++ )
    {
        var 
chr   =  str.charAt(i);
        var c 
=  str2asc( chr );
        tt 
+=   chr   +   " : "   +  c  +   " n " ;
        
if  (parseInt( " 0x "   +  c)  >  0x7f)
        {
            ret 
+=   " % "   +  c.slice( 0 , 2 +   " % "   +  c.slice( - 2 );
        }
        
else
        {
            
if  ( chr   ==   "   " )
                ret 
+=   " + " ;
            
else   if  (strSpecial.indexOf( chr ) ! =   - 1 )
                ret 
+=   " % "   +  c.toString( 16 );
            
else
                ret 
+=   chr ;
        }
    }
   
    return ret;
}
 
function  urlDecode(str)
{
    var ret 
=   "" ;
    
for  (var i  =   0 ; i  <  str.length; i ++ )
    {
        var 
chr   =  str.charAt(i);
        
if  ( chr   ==   " + " )
        {
            ret 
+=   "   " ;
        }
        
else   if  ( chr   ==   " % " )
        {
            var 
asc   =  str.substring(i + 1 , i + 3 );
            
if  (parseInt( " 0x " + asc >  0x7f)
            {
                ret 
+=  asc2str(parseInt( " 0x "   +   asc + str.substring(i + 4 , i + 6 )));
                i 
+=   5 ;
            }
            
else
            {
                ret 
+=  asc2str(parseInt( " 0x " + asc ));
                i 
+=   2 ;
            }
        }
        
else
        {
            ret 
+=   chr ;
        }
    }
   
    return ret;
}
復制代碼

 

 http://www.cftea.com/c/2009/03/AIDM29BK6DTV9BI8.asp

 


url 編碼 js url傳參中文亂碼解決方案(教程)

 前后台用js傳參過程中,如果是中文就容易出現亂碼,所以最好是先編碼。 1.配置文件web.config中 在節中加上整個網站(的)編碼方式。
<globalization fileEncoding="GB2312" requestEncoding="GB2312" responseEncoding="GB2312"/>
這樣參數就以gb2312(的)中文編碼方式傳輸了。而一般默認是utf-8.
2.在傳參是先編碼在傳輸,接受時先編碼,在接收。
string mm=Server.URLEncode(你們);
Response.Redirect(index.aspx?mm=+mm);
然后在接收頁解碼:
string mm = Server.URLDecode(Requext.querystring(mm));
javascript中存在幾種對URL字符串進行編碼(的)方法:escape(),encodeURI(),以及encodeURIComponent()。這幾種編碼所起(的)作用各不相同。
escape() 方法:
采用ISO Latin字符集對指定(的)字符串進行編碼。所有(的)空格符、標點符號、特殊字符以及其他們非ASCII字符都將被轉化成%xx格式(的)字符編碼(xx等於該字符在字符集表里面(的)編碼(的)16進制數字)。比如,空格符對應(的)編碼是%20。
不會被此方法編碼(的)字符: @ * / +
encodeURI() 方法:
把URI字符串采用UTF-8編碼格式轉化成escape格式(的)字符串。
不會被此方法編碼(的)字符:! @ # $& * ( ) = : / ; ? + '
encodeURIComponent() 方法:
把 URI字符串采用UTF-8編碼格式轉化成escape格式(的)字符串。與encodeURI()相比,這個方法將對更多(的)字符進行編碼,比如 / 等字符。所以如果字符串里面包含了URI(的)幾個部分(的)話,不能用這個方法來進行編碼,否則 / 字符被編碼之后URL將顯示錯誤。
不會被此方法編碼(的)字符:! * ( ) '
因 此,對於中文字符串來說,如果不希望把字符串編碼格式轉化成UTF-8格式(的)(比如原頁面和目標頁面(的)charset是一致(的)時候),只需要 使用 escape。如果你們(的)頁面是GB2312或者其他們(的)編碼,而接受參數(的)頁面是UTF-8編碼(的),就要采用encodeURI或者 encodeURIComponent。
另外,encodeURI/encodeURIComponent是在javascript1.5之后引進(的),escape則在javascript1.0版本就有。

傳參:用encodeURI("url參數")將url編碼
收參:用decodeURI("接收到(的)值")解碼

 


 

 

js實現url加密,解密

復制代碼
查看效果:js實現url加密,解密

< ! -- 代碼來自網絡 -->

< title > js實現asp中的UrlEncode和UrlDecode -- 來自網絡 </ title >

< form action = ""  method = " post "  name = " form " >

< input type = " text "  size = " 50 "  name = " code "  maxlength = " 100 "   />< br  />

< input type = " submit "  value = " 加密解密 "   />

</ form >



< script language = " vbscript " >

Function  str2asc(strstr)

str2asc 
=   hex ( asc (strstr))

End Function

Function  asc2str(ascasc)

asc2str 
=   chr (ascasc)

End Function

</ script >



< script language = " javascript " >

/* 這里開始時UrlEncode和UrlDecode函數 */

function  UrlEncode(str){

var ret
= "" ;

var strSpecial
= " !\ " #$% & ' ()*+,/:;<=>?[]^`{|}~%";

for (var i = 0 ;i < str.length;i ++ ){

var 
chr   =  str.charAt(i);

var c
= str2asc( chr );

// tt +=   chr + " : " + c + " n " ;

if (parseInt( " 0x " + c)  >  0x7f){

ret
+= " % " + c.slice( 0 , 2 ) + " % " + c.slice( - 2 );

}
else {

if ( chr == "   " )

ret
+= " + " ;

else   if (strSpecial.indexOf( chr )! =- 1 )

ret
+= " % " + c.toString( 16 );

else

ret
+= chr ;

}

}

return ret;

}

function  UrlDecode(str){

var ret
= "" ;

for (var i = 0 ;i < str.length;i ++ ){

var 
chr   =  str.charAt(i);

if ( chr   ==   " + " ){

ret
+= "   " ;

}
else   if ( chr == " % " ){

var 
asc   =  str.substring(i + 1 ,i + 3 );

if (parseInt( " 0x " + asc ) > 0x7f){

ret
+= asc2str(parseInt( " 0x " + asc + str.substring(i + 4 ,i + 6 )));

i
+= 5 ;

}
else {

ret
+= asc2str(parseInt( " 0x " + asc ));

i
+= 2 ;

}

}
else {

ret
+=   chr ;

}

}

return ret;

}



ss
= ""

aa
= UrlEncode(ss)

bb
= UrlDecode(ss)

document.write(
" 編碼后 " + aa + " <br> " );

document.write(
" 解碼后: " + bb);
復制代碼

 

 

 


 

 傳地址的時候有#擾亂了url中adress值的傳輸。

最后還是選擇了vbscript+js的方法,因為,上面純js的不好用..  - = 好吧,大概是我沒用明白....  

 http://www.cnblogs.com/neru/archive/2010/07/10/1774718.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM